最近刚换到新的公司,用的是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。
今天就先整理到这里,以后会慢慢完善的。