Tengo una función PL / SQL (que se ejecuta en Oracle 10g) en la que actualizo algunas filas. ¿Hay alguna manera de averiguar cuántas filas se vieron afectadas por la ACTUALIZACIÓN? Cuando ejecuto la consulta manualmente, me dice cuántas filas se vieron afectadas, quiero obtener ese número en PL / SQL.
oracle
plsql
sql-update
Thomas Lötzer
fuente
fuente
INSERT INTO
...COMMIT
y también en el mismo procedimiento después de la inserción, tengoUPDATE SET WHERE EXISTS..COMMIT
, pero mii := SQL%rowcount;
está devolviendo todas las filas en lugar de las filas que se actualizaron solo. ¿Que puede ser?Para aquellos que desean los resultados de un comando simple, la solución podría ser:
El problema básico es que SQL% ROWCOUNT es una variable (o función) PL / SQL, y no se puede acceder directamente desde un comando SQL. Al usar un bloque PL / SQL que no sea un nombre, esto se puede lograr.
... Si alguien tiene una solución para usarlo en un comando SELECT, estaría interesado.
fuente
alternativamente,
SQL%ROWCOUNT
puede usar esto dentro del procedimiento sin necesidad de declarar una variablefuente
SQL%ROWCOUNT
también se puede usar sin ser asignado (al menos desde Oracle 11g ).Siempre que no se haya realizado ninguna operación (actualizaciones, eliminaciones o inserciones) dentro del bloque actual,
SQL%ROWCOUNT
se establece en nulo. Luego permanece con el número de línea afectada por la última operación DML:decir que tenemos mesa CLIENTE
Lo probaríamos de esta manera:
Resultando en:
fuente
2 clientes actualizados para 1
sin cliente con 2 val_cli.
sin cliente con 3 val_cli.
1 cliente actualizado para 4
sin cliente con 5 val_cli.
1 cliente actualizado para 6
sin cliente con 7 val_cli.
sin cliente con 8 val_cli.
sin cliente con 9 val_cli.
1 cliente actualizado para 10
Número de líneas totales afectadas operación de actualización: 5
fuente
Use la función analítica Count (*) SOBRE PARTICIÓN POR NULO Esto contará el número total de filas
fuente