Hola foreros,
Soy nuevo en Oracle, y estoy trabajando en un problema que en Sql lo solucionaría con un Update con join. En Oracle la sintaxis es diferente:
Código:
UPDATE (
SELECT campo1, campo2
FROM tabla1 join tabla2 on tabla1.x = tabla2.y
)
SET campo1=campo2;
Esto me funciona bien, pero ahora estoy en el problema que necesito agrupar los resultados:
Inicializando el ejemplo: 3 tablas con registros
Código:
drop table table1 /
drop table table2 /
DROP TABLE TABLE3 /
create table table1
(
numero number,
cantidad number
)/
insert into table1 values(1,10);
insert into table1 values(1,20);
insert into table1 values(1,30);
insert into table1 values(2,40);
insert into table1 values(2,50);
insert into table1 values(2,60);
insert into table1 values(3,70);
insert into table1 values(3,80);
insert into table1 values(3,90);
/
create table table2
(
numero number,
cantidad number
)/
insert into table2 values(1,10);
insert into table2 values(1,20);
insert into table2 values(2,40);
insert into table2 values(2,50);
insert into table2 values(3,70);
insert into table2 values(3,80);
/
CREATE TABLE TABLE3(
NUMERO1 NUMBER,
CANTIDAD1 NUMBER,
NUMERO2 NUMBER,
CANTIDAD2 NUMBER
)/
Ahora, de tabla 1 agrupo por NUMERO y agrego los valores a la tabla 3
Código:
INSERT INTO TABLE3(NUMERO1,CANTIDAD1)
SELECT NUMERO,SUM(CANTIDAD)
FROM TABLE1
GROUP BY NUMERO;
/*
NUMERO1 CANTIDAD1 NUMERO2 CANTIDAD2
---------------------- ---------------------- ---------------------- ----------------------
1 60
2 150
3 240
*/
Ahora, quiero actualizar TABLE3.NUMERO2 y TABLE3.CANTIDAD2 con los valores de TABLE2
Código:
UPDATE /*+BYPASS_UJVC*/(
SELECT TRES.NUMERO2, TRES.CANTIDAD2,
DOS.NUMERO, DOS.CANTIDAD
FROM TABLE3 TRES
JOIN TABLE2 DOS ON TRES.NUMERO1 = DOS.NUMERO
)
SET NUMERO2=NUMERO, CANTIDAD2 = CANTIDAD;
/*
NUMERO1 CANTIDAD1 NUMERO2 CANTIDAD2
---------------------- ---------------------- ---------------------- ----------------------
1 60 1 20
2 150 2 50
3 240 3 80
*/
En la columna cantidad solo me guarda el último valor correspondiente al numero (20, 50, 80). Entonces lo que yo necesito es que me sume las cantidades de la tabla2:
Intente usar un group by pero me marca error
Código:
UPDATE /*+BYPASS_UJVC*/(
SELECT tres.numero2, TRES.CANTIDAD2,
DOS.NUMERO, sum(DOS.CANTIDAD ) cantidad
FROM TABLE3 TRES
JOIN TABLE2 DOS ON TRES.NUMERO1 = DOS.NUMERO
group by tres.numero2, TRES.CANTIDAD2, DOS.NUMERO
)
SET NUMERO2=NUMERO, CANTIDAD2 = CANTIDAD;
Error SQL: ORA-01732: operación de manipulación de datos no válida en esta vista
Alguien tiene alguna idea? Gracias de antemano.