您的位置:首页 > 数据库 > Oracle

MYSQL和ORACLE的触发器与存储过程语法差异

2016-09-19 17:01 531 查看
整改了一番脚本,遇到了一些两种数据库之间的差异,记录一下:

触发器:

差异MYSQLORACLE说明
创建语句不同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 多一对冒号
存储过程:

差异MYSQLORACLE说明
创建语句不同DROP PROCEDURE IF EXISTS `SD_USER_P_ADD_USR`;
create procedure AA(
aa varchar(100))
create or replace procedure AA(
varchar aa) is
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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: