Eu tenho uma função PL / SQL (em execução no Oracle 10g) na qual atualizo algumas linhas. Existe uma maneira de descobrir quantas linhas foram afetadas pelo UPDATE? Ao executar a consulta manualmente, ele informa quantas linhas foram afetadas, desejo obter esse número no PL / SQL.
oracle
plsql
sql-update
Thomas Lötzer
fonte
fonte
INSERT INTO
..COMMIT
e também no mesmo procedimento após a inserção, tenhoUPDATE SET WHERE EXISTS..COMMIT
, mas o meui := SQL%rowcount;
está retornando todas as linhas em vez das linhas que foram atualizadas apenas. O que poderia ser?Para aqueles que desejam os resultados de um comando simples, a solução pode ser:
O problema básico é que o SQL% ROWCOUNT é uma variável (ou função) PL / SQL e não pode ser acessado diretamente de um comando SQL. Usando um bloco PL / SQL que não seja o nome, isso pode ser alcançado.
... Se alguém tiver uma solução para usá-lo em um comando SELECT, eu estaria interessado.
fonte
Como alternativa,
SQL%ROWCOUNT
você pode usá-lo dentro do procedimento sem precisar declarar uma variávelfonte
SQL%ROWCOUNT
também pode ser usado sem ser atribuído (pelo menos a partir do Oracle 11g ).Desde que nenhuma operação (atualizações, exclusões ou inserções) tenha sido executada dentro do bloco atual,
SQL%ROWCOUNT
seja definida como nula. Em seguida, ele permanece com o número de linhas afetadas pela última operação DML:diga que temos mesa CLIENT
Testaríamos assim:
Resultando em:
fonte
2 clientes atualizados para 1
nenhum cliente com 2 val_cli.
nenhum cliente com 3 val_cli.
1 cliente atualizado para 4
nenhum cliente com 5 val_cli.
1 cliente atualizado para 6
nenhum cliente com 7 val_cli.
nenhum cliente com 8 val_cli.
nenhum cliente com 9 val_cli.
1 cliente atualizado para 10
Número total de linhas afetadas operação de atualização: 5
fonte
Use a função analítica Contagem (*) OVER PARTITION BY NULL Contará o número total de linhas
fonte