2012-08-09 61 views
5

我正在寫一個INSERT語句在PL/SQL塊中插入一行到表中。如果插入失敗或沒有插入行,那麼我需要回滾先前執行的更新語句。Sql插入語句返回「零/無行插入」

我想知道在什麼情況下INSERT語句可以插入0行。如果由於某種異常導致插入失敗,我可以在異常塊中處理它。是否存在INSERT可能成功運行但不會拋出異常的情況,我需要檢查SQL%ROWCOUNT < 1

+2

您的INSERT語句是INSERT ... VALUES語句嗎?或者是「INSERT ... SELECT」? – 2012-08-09 05:11:18

+1

我的INSERT語句如下所示:INSERT ... VALUES – Sekhar 2012-08-09 05:53:52

回答

15

值。如果你INSERT語句結構爲INSERT ... VALUES,然後它將成功插入一行或生成一個異常。沒有必要檢查SQL%ROWCOUNT

如果您INSERT語句結構爲INSERT ... SELECT,那麼很可能是SELECT語句將返回0行時,INSERT聲明將插入0行,並沒有將引發異常。如果您認爲這是一個錯誤,您需要在INSERT語句運行後檢查SQL%ROWCOUNT

+0

優秀的答案!我一直想知道這會如何發生。 – Gili 2012-12-06 03:34:10

2

是,要找出有多少行是由DML語句(INSERT,更新等)的影響,你可以檢查的SQL%ROWCOUNT

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

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