iT邦幫忙

0

ORACLE資料庫是否有類似@@Error跟@@ROWCOUNT的方法

  • 分享至 

  • xImage

目前在學習SQL的rollback的用法
在網路上找到了在新增.更新.刪除時
只要有一筆更新失敗或是要更新.刪除的數量不正確就rollback的方法
http://aixo.pixnet.net/blog/post/38747309-%5Bt-sql%5D-transaction-%E7%94%A8%E6%B3%95

http://blog.xuite.net/danny72.chen/blog/22966476-+%E8%B3%87%E6%96%99%E5%BA%AB+SQL+Server+%E9%80%B2%E9%9A%8E%E6%A6%82%E5%BF%B5+
我依照範例去改
在MSSQL(SQL SERVER2000)的資料庫測試是成功的

但是ORACLE資料庫宣告跟指令的方式不同
網路上只有找到變數宣告給值
DECLARE chk NUMBER(1); --宣告
chk := 0 --給值
但是IF @@Error <> 0這個判斷在ORACLE中有什麼方法可以代替@@ERROR
另外更改.刪除的地方則是使用IF @@Error <> 0@@ROWCOUNT <> 要更新或刪除的筆數
當作判斷
@@ROWCOUNT在ORACLE又有什麼能夠代替的

看更多先前的討論...收起先前的討論...
shengfu iT邦新手 2 級 ‧ 2017-03-21 16:10:06 檢舉
有count的寫法叫做SQL%ROWCOUNT ,請看這篇http://tomkuo139.blogspot.tw/2010/03/oracle-plsql-dml.html
假設你要卡控只要有一筆INSERT ERROR 就不存入全部ROLL BACK,你可以用EXCEPTION的語法去做卡控就好,因為只要觸發ERROR一定會跳到EXCEPTION
Albert iT邦高手 1 級 ‧ 2017-03-21 16:27:39 檢舉
當然都有捕抓"處理中跟處理後跟例外等訊息"
可以參考 Oracle ERP 處理方式
謝謝shengfu的指點
kuosheng iT邦新手 4 級 ‧ 2017-03-22 09:07:37 檢舉
如果你是用sqlplus , 應該沒有這種exception handle 的block, 頂多就是WHENEVER OSERROR EXIT 9 ;或者 WHENEVER SQLERROR EXIT SQL.SQLCODE; 這種語法, 然後從OS Shell來處理, 其他的client 介面, 諸如sql developer , 或者toad 你可以再研究看看!! 如果你真的有需要對exception 進行處理, shengfu 的回覆就已經提到了, 你要寫的是Oracle PL/SQL 程式, 它是Oracle 的Prcoedure language.
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
尼克
iT邦大師 1 級 ‧ 2017-03-23 10:22:34
DECLARE
   v_num1     INTEGER := 10;
   v_num2     INTEGER := 0;
   v_result   NUMBER;
BEGIN
   v_result := v_num1 / v_num2;
   DBMS_OUTPUT.PUT_LINE ('v_result:' || v_result);
EXCEPTION
   WHEN ZERO_DIVIDE
   THEN
      DBMS_OUTPUT.PUT_LINE ('Divided by zero');
END;

我要發表回答

立即登入回答