MYSQL和ORACLE的觸發器與存儲過程語法差異


整改了一番腳本,遇到了一些兩種數據庫之間的差異,記錄一下:

觸發器:

差異 MYSQL ORACLE 說明
創建語句不同 create trigger `AA` BEFORE INSERT on `BB` 
for each row 
create or replace trigger AA
  before insert or update or delete on BB
  for each row
1.Oracle可以在一個觸發器觸發insert,delete,update事件. 
   Mysql每個觸發器只支持一個事件. 也就是說,目前每個trigger需要拆分成3個mysql trigger.
引用新舊數據不同 取得新數據NEW.aa
取得老數據OLD.bb
取得新數據:new.aa
取得老數據:old.bb
1.oracle 多一對冒號

 

 

 

 

 

 

存儲過程:

差異 MYSQL ORACLE 說明
創建語句不同 DROP PROCEDURE IF EXISTS `SD_USER_P_ADD_USR`;
create procedure AA(
       aa varchar(100))
create or replace procedure AA(
   varchar aais

1.oracle創建語比較簡潔,mysql要先執行drop

2.mysql先變量再類型,oracle相反,且不必限定長度

3.如果是number或varchar2的話不需要定義長度。否則編譯不能通過

異常處理不一樣 DECLARE EXIT HANDLER FOR  AAEXCEPTION 
 BEGIN
   ...
 END;
EXCEPTION
    WHEN OTHERS THEN
    ROLLBACK ;
    ....
1.mysql不能自定義異常,且使用內部異常時需要先定義
調用存儲方式不同 call procedure(); procedure(); 1.調用方式不同

 

 

 

 

 

 

 

 

 

 由於oracle刪除觸發器前沒有判斷是否存在,那么如何任性刪除觸發器呢:

declare   
 V_NUM number;   

BEGIN  

select count(0) into V_NUM from user_triggers where trigger_name = 'AA'; (注意大小寫)

if V_NUM > 0 then   
    execute immediate 'DROP TRIGGER  AA';   
    end if;

END;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM