Saya memiliki fungsi PL / SQL (berjalan pada Oracle 10g) di mana saya memperbarui beberapa baris. Apakah ada cara untuk mengetahui berapa banyak baris yang terpengaruh oleh UPDATE? Ketika menjalankan kueri secara manual, ini memberitahu saya berapa banyak baris yang terpengaruh, saya ingin mendapatkan nomor itu dalam PL / SQL.
oracle
plsql
sql-update
Thomas Lötzer
sumber
sumber
INSERT INTO
..COMMIT
dan juga dalam prosedur yang sama setelah memasukkan, saya punyaUPDATE SET WHERE EXISTS..COMMIT
, tapi sayai := SQL%rowcount;
mengembalikan semua baris bukan baris yang hanya diperbarui. Apa yang bisaBagi mereka yang menginginkan hasil dari perintah sederhana, solusinya dapat:
Masalah dasar adalah bahwa SQL% ROWCOUNT adalah variabel PL / SQL (atau fungsi), dan tidak dapat diakses langsung dari perintah SQL. Dengan menggunakan blok PL / SQL noname, ini dapat dicapai.
... Jika ada yang punya solusi untuk menggunakannya dalam Perintah SELECT, saya akan tertarik.
sumber
sebagai alternatif,
SQL%ROWCOUNT
Anda dapat menggunakan ini dalam prosedur tanpa perlu mendeklarasikan variabelsumber
SQL%ROWCOUNT
juga dapat digunakan tanpa ditugaskan (setidaknya dari Oracle 11g ).Selama tidak ada operasi (pembaruan, penghapusan atau penyisipan) telah dilakukan dalam blok saat ini,
SQL%ROWCOUNT
diatur ke nol. Kemudian tetap dengan jumlah garis yang dipengaruhi oleh operasi DML terakhir:katakanlah kita memiliki tabel KLIEN
Kami akan mengujinya dengan cara ini:
Yang menghasilkan:
sumber
2 klien diperbarui untuk 1
tanpa klien dengan 2 val_cli.
tidak ada klien dengan 3 val_cli.
1 klien diperbarui untuk 4
tanpa klien dengan 5 val_cli.
1 klien diperbarui untuk 6
tanpa klien dengan 7 val_cli.
tidak ada klien dengan 8 val_cli.
tidak ada klien dengan 9 val_cli.
1 klien diperbarui untuk 10
Jumlah total baris yang terpengaruh operasi pembaruan: 5
sumber
Gunakan fungsi analitik Count (*) OVER PARTITION BY NULL Ini akan menghitung total # baris
sumber