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:
Esto me funciona bien, pero ahora estoy en el problema que necesito agrupar los resultados:UPDATE ( SELECT campo1, campo2 FROM tabla1 join tabla2 on tabla1.x = tabla2.y ) SET campo1=campo2;
Inicializando el ejemplo: 3 tablas con registros
Código:
Ahora, de tabla 1 agrupo por NUMERO y agrego los valores a la tabla 3drop 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 )/
Código:
Ahora, quiero actualizar TABLE3.NUMERO2 y TABLE3.CANTIDAD2 con los valores de TABLE2INSERT INTO TABLE3(NUMERO1,CANTIDAD1) SELECT NUMERO,SUM(CANTIDAD) FROM TABLE1 GROUP BY NUMERO; /* NUMERO1 CANTIDAD1 NUMERO2 CANTIDAD2 ---------------------- ---------------------- ---------------------- ---------------------- 1 60 2 150 3 240 */
Código:
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: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 */
Intente usar un group by pero me marca error
Código:
Error SQL: ORA-01732: operación de manipulación de datos no válida en esta vistaUPDATE /*+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;
Alguien tiene alguna idea? Gracias de antemano.