我正在寫一個INSERT
語句在PL/SQL塊中插入一行到表中。如果插入失敗或沒有插入行,那麼我需要回滾先前執行的更新語句。Sql插入語句返回「零/無行插入」
我想知道在什麼情況下INSERT
語句可以插入0行。如果由於某種異常導致插入失敗,我可以在異常塊中處理它。是否存在INSERT
可能成功運行但不會拋出異常的情況,我需要檢查SQL%ROWCOUNT < 1
?
我正在寫一個INSERT
語句在PL/SQL塊中插入一行到表中。如果插入失敗或沒有插入行,那麼我需要回滾先前執行的更新語句。Sql插入語句返回「零/無行插入」
我想知道在什麼情況下INSERT
語句可以插入0行。如果由於某種異常導致插入失敗,我可以在異常塊中處理它。是否存在INSERT
可能成功運行但不會拋出異常的情況,我需要檢查SQL%ROWCOUNT < 1
?
值。如果你INSERT
語句結構爲INSERT ... VALUES
,然後它將成功插入一行或生成一個異常。沒有必要檢查SQL%ROWCOUNT
。
如果您INSERT
語句結構爲INSERT ... SELECT
,那麼很可能是SELECT
語句將返回0行時,INSERT
聲明將插入0行,並沒有將引發異常。如果您認爲這是一個錯誤,您需要在INSERT
語句運行後檢查SQL%ROWCOUNT
。
優秀的答案!我一直想知道這會如何發生。 – Gili 2012-12-06 03:34:10
是,要找出有多少行是由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;
您的INSERT語句是INSERT ... VALUES語句嗎?或者是「INSERT ... SELECT」? – 2012-08-09 05:11:18
我的INSERT語句如下所示:INSERT ... VALUES – Sekhar 2012-08-09 05:53:52