MYSQL和ORACLE的触发器与存储过程语法差异
2024-10-16 14:29:16
整改了一番脚本,遇到了一些两种数据库之间的差异,记录一下:
触发器:
差异 | 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.调用方式不同 |
由于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;
最新文章
- Myeclipse非正常关闭出现问题
- ZedGraph饼图---傻瓜版
- awk用法
- Solr5.3.1 SolrJ查询索引结果
- oneThink安装出错解决
- [设计模式] 12 代理模式 proxy
- 2014年度辛星css教程夏季版第五节
- mysql主从同步从库同步报错
- Ext JS学习第十七天 事件机制event(二)
- if else与switch区别
- 第一讲 新手如何学习HTTP协议之实践项目多开微信机器人
- Linux -- 项目部署
- [android] 手机卫士项目
- Centos7部署kubernetes Proxy(七)
- Python pip下载安装库 临时用清华镜像命令
- Linux命令之lsb_release - 查看当前系统的发行版信息
- python 四种单例模式
- 622.设计循环队列 javascript实现
- 51nod 1217 Minimum Modular(数论+暴力)
- JQuery -- Jquery 中的Ajax, Jquery解析xml文件
热门文章
- 邮件发送 java
- deepin2014.1快捷键
- 用户id有则更新,无则添加 使用replace into (代替 insert into)
- Openjudge-计算概论(A)-骑车与走路
- Developing a Custom Membership Provider from the scratch, and using it in the FBA (Form Based Authentication) in SharePoint 2010
- MySQL5.5.源码安装
- C# List 扩展排序
- php中文乱码问题分析及解决办法
- C语言_函数【转】
- vi 操作技巧