MYSQL和ORACLE的触发器与存储过程语法差异
2016-09-19 17:01
531 查看
整改了一番脚本,遇到了一些两种数据库之间的差异,记录一下:
触发器:
存储过程:
由于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;
触发器:
差异 | 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 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.调用方式不同 |
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;
相关文章推荐
- ORACLE PL/SQL基本语法 触发器 存储过程
- mysql高级语法:变量声明, 游标, 函数, 存储过程, 循环体, 触发器
- 数据库Oracle与Mysql语法对比:存储过程
- mysql,sqlserver,oracle查看所有存储过程,函数,视图,触发器,表
- Mysql与Oracle存储过程语法对比
- mysql 、oracle存储过程语法区别
- Oracle 存储过程的基本语法
- oracle 存储过程的基本语法
- oracle存储过程基本语法
- oracle 存储过程的基本语法
- oracle 存储过程的基本语法
- oracle 存储过程的基本语法
- ORACLE----触发器,存储过程及JOB [转]
- oracle 存储过程的基本语法
- oracle 存储过程的基本语法
- oracle 存储过程的基本语法
- oracle 存储过程的基本语法
- oracle 存储过程的基本语法
- oracle 存储过程语法例子
- oracle 存储过程的基本语法 及注意事项