2012-08-09 16 views
5

Bir PL/SQL bloğunda tabloya bir satır eklemek için bir INSERT Bildirimi yazıyorum. Bu ekleme başarısız olursa veya satır eklenmediyse, önceden yürütülen güncelleştirme bildirimini geri almam gerekir.Sql Ekleme deyimini döndür "sıfır/satır eklenmedi"

INSERT ifadesinin hangi durumlarda 0 satır ekleyebileceğini bilmek istiyorum. Ekleme bazı istisnalar nedeniyle başarısız olursa, bunu istisna bloğunda halledebilirim. INSERT'un başarılı bir şekilde çalıştığı ancak SQL%ROWCOUNT < 1 olup olmadığını kontrol etmem gereken bir istisna atmadığı durumlar var mı? senin INSERT deyimi bir INSERT ... VALUES olarak yapılandırılmıştır Eğer

+2

'INSERT' ifadeniz bir' INSERT ... VALUES' ifadesi midir? Veya bir "INSERT ... SELECT"? –

+1

INSERT ifadem şöyle: INSERT ... VALUES – Sekhar

cevap

15

değerini kontrol edebilirsiniz, DML ifadeleri (INSERT, GÜNCEL vs.) etkilenen kaç satır öğrenmek için Ya tam olarak bir satır ekler veya bir istisna oluşturur. SQL%ROWCOUNT'u kontrol etmeye gerek yoktur. senin INSERT deyimi bir INSERT ... SELECT olarak yapılandırılmıştır Eğer

, o zaman SELECT açıklamada, 0 satır döndürür INSERT açıklamada 0 satır ekler ve hiçbir özel durum olması mümkündür. Bunun bir hata olduğunu düşünüyorsanız, ifadesini INSERT deyiminden sonra kontrol etmeniz gerekir.

+0

Mükemmel cevap! Bunun nasıl olabileceğini her zaman merak ettim. – Gili

2

Evet, o zaman SQL%ROWCOUNT

INSERT INTO TABLE 
SELECT col1, col2,.... 
    FROM TAB; 

if SQL%ROWCOUNT=0 then 
    RAISE_APPLICATION_ERROR(-20101, 'No records inserted'); 
end if;