oracle 和mysql触发器的编写有什么不同。

时间:2022-12-29 05:11:08

最近刚换到新的公司,用的是mysql,以前一直用oracle。这几天写了触发器感觉oracle和mysql的触发器还是不同的。

1首先在oracle中  如果你想定义一个触发器把insert,update,insert 写入同一触发器,这是可以的,语法是:

create or replace trigger updatedb_TEST_STURECORD  
  before insert or update or delete on TEST_STURECORD
   for each rowbegin 
 if updating  then     
   update <a target=_blank href="mailto:TEST_STURECORD@DBLINKTEST">TEST_STURECORD@DBLINKTEST</a>        set STUR_ID =:New.STUR_ID, stur_where=:New.stur_where;
  end if;   
 if inserting then     
  insert into <a target=_blank href="mailto:TEST_STURECORD@DBLINKTEST(STUR_ID,STU_UNP_ID,STUR_STIME,stur_where,STUR_WORK,STUR_FTIME">TEST_STURECORD@DBLINKTEST(STUR_ID,STU_UNP_ID,STUR_STIME,stur_where,STUR_WORK,STUR_FTIME</a>)       
  values (:New.STUR_ID,:New.STU_UNP_ID,:New.STUR_STIME,:New.stur_where,:New.STUR_WORK,:New.STUR_FTIME);  
end if; 
 if deleting 
then delete from <a target=_blank href="mailto:TEST_STURECORD@DBLINKTEST">TEST_STURECORD@DBLINKTEST</a> where STUR_ID=:New.STUR_ID; end if;
end;
如果要是oracle在操作的自己的本表 触发器必须是before的。然后:new.xxx="xxx"

 而mysql是不可以的。只能分开一个一个的建

2.oracle 支持or replace 而mysql是不可以的。

3,oracle在使用的变量要在begin前面声明。而mysql则用@符号直接使用。

例子:oracle

DECLARE
 IS_EXIST_BASIC NUMBER;
  isbanjie NUMBER;
  ispizhun NUMBER;
  isshenhe NUMBER;
  ischengban NUMBER;
  isteshu NUMBER;

在begin里:

select count(*) into isbanjie from t_states s where s.handlestate='办结' and s.projid=:new.PROJID;

mysql


SELECT @uc_id=user_head FROM et_users WHERE user_id=NEW.user_id; 

4,oracle变量赋值用的是:= ,而mysql用的是= 。

5,oracle新表和旧表用的是:new 和:old,而mysql用的是new 和old。

今天就先整理到这里,以后会慢慢完善的。