2017-04-14 56 views
-1

我有存儲過程,執行2個操作,刪除然後更新。我的目的是更新應該經常更新一行,若再行更新,我想取消這兩種操作,這是我的交易,我試圖把交易存入存儲過程以取消所有操作

BEGIN 

    BEGIN transaction trans; 
    (here is delete query) 


     (here is update query) 
    IF SQL%ROWCOUNT > 1 THEN 
      ROLLBACK TO tran; 
    ELSE 
      COMMIT; 
    END IF; 
    END; 

END; 

但是這會產生錯誤Error(5,23): PLS-00103: Encountered the symbol "TRANS" when expecting one of the following: := . (@ % ; The symbol ":=" was substituted for "TRANS" to continue.

什麼是不正確

回答

1

嘗試:

BEGIN 
     (here is delete query) 

     (here is update query) 
     IF SQL%ROWCOUNT > 1 THEN 
      RAISE_APPLICATION_ERROR(-20001, 'rollbacked'); 
     END IF; 
END; 
在Oracle

存儲過程由默認的事務,如果你有2個查詢(刪除和更新),你想放棄他們兩個,不需要額外的BEGIN transaction ...或像這樣

+0

是的,我想中止這兩個查詢,這是太簡單了,謝謝! –

2

在Oracle中,你必須使用保存點,應該是這樣的:

BEGIN 

SAVEPOINT tran; 
    (here is delete query) 


     (here is update query) 
    IF SQL%ROWCOUNT > 1 THEN 
      ROLLBACK TO tran; 
    ELSE 
      COMMIT; 
    END IF; 
END; 

但是,對於我,你喜歡回滾並不清楚,或許SAVEPOINT tran;應放在(here is delete query)之後 - 取決於您的要求。

+0

謝謝,我的要求是取消兩個查詢。我這樣做,再次感謝你 –