J'ai une fonction PL / SQL (fonctionnant sur Oracle 10g) dans laquelle je mets à jour certaines lignes. Existe-t-il un moyen de savoir combien de lignes ont été affectées par la mise à jour? Lors de l'exécution manuelle de la requête, il me dit combien de lignes ont été affectées, je veux obtenir ce nombre en PL / SQL.
oracle
plsql
sql-update
Thomas Lötzer
la source
la source
INSERT INTO
..COMMIT
et aussi dans la même procédure après l'insertion, j'aiUPDATE SET WHERE EXISTS..COMMIT
, mais moni := SQL%rowcount;
renvoie toutes les lignes au lieu des lignes qui ont été mises à jour uniquement. Que pourrait être?Pour ceux qui veulent les résultats d'une simple commande, la solution pourrait être:
Le problème de base est que SQL% ROWCOUNT est une variable (ou fonction) PL / SQL et ne peut pas être directement accessible à partir d'une commande SQL. En utilisant un bloc PL / SQL non nom, cela peut être réalisé.
... Si quelqu'un a une solution pour l'utiliser dans une commande SELECT, je serais intéressé.
la source
Sinon,
SQL%ROWCOUNT
vous pouvez utiliser cela dans la procédure sans qu'il soit nécessaire de déclarer une variablela source
SQL%ROWCOUNT
peut également être utilisé sans être affecté (au moins à partir d' Oracle 11g ).Tant qu'aucune opération (mises à jour, suppressions ou insertions) n'a été effectuée dans le bloc actuel,
SQL%ROWCOUNT
est défini sur null. Ensuite, il reste avec le numéro de ligne affecté par la dernière opération DML:disons que nous avons une table CLIENT
Nous le testerions de cette façon:
Résultant en:
la source
2 client mis à jour pour 1
pas de client avec 2 val_cli.
pas de client avec 3 val_cli.
1 client mis à jour pour 4
pas de client avec 5 val_cli.
1 client mis à jour pour 6
pas de client avec 7 val_cli.
pas de client avec 8 val_cli.
pas de client avec 9 val_cli.
1 client mis à jour pendant 10
Nombre total de lignes affectées opération de mise à jour: 5
la source
Utilisez la fonction analytique Count (*) OVER PARTITION BY NULL Cela comptera le nombre total de lignes
la source