sql >> Databasteknik >  >> RDS >> Oracle

Oracle 11g:I PL/SQL finns det något sätt att få information om infogade och uppdaterade rader efter MERGE DML-satsen?

Det finns inte ett inbyggt sätt att få separata infognings- och uppdateringsantal, nej. SQL%ROWCOUNT skulle berätta hur många rader som är sammanslagna, som du säkert redan vet, men det finns ingen motsvarighet för att få separata värden för infogningar och uppdateringar.

Denna artikel av Adrian Billington visar ett sätt att få informationen genom att inkludera ett funktionsanrop i sammanslagningen, vilket kan lägga till lite overhead.

Det finns ett liknande, och kanske enklare, knep från MichaelS på Oracle-forumen , vilket jag inte heller kan ta åt mig äran för alls förstås. Jag är frestad att återskapa det här men jag är inte säker på om det är tillåtet, men i huvudsak använder det sys_context att upprätthålla en räkning, ungefär på samma sätt som Adrians lösning gjorde med en paketvariabel. Jag skulle använda den, eftersom den är renare och jag tror att den är lättare att följa och underhålla.

Fortfarande farligt nära ett svar med endast länk men jag vill inte plagiera andras arbete heller...



  1. Uppdaterar tabell i trigger efter uppdatering på samma tabell

  2. Hur man installerar MariaDB-databasen i Debian 10

  3. PostgresSQL / pgAdmin4 / dumpserverversion matchar inte

  4. Det går inte att lägga till främmande nyckel i MySQL 5.7 (Saknar begränsning i den refererade tabellen)