zoukankan      html  css  js  c++  java
  • MYSQL和ORACLE的触发器与存储过程语法差异

    整改了一番脚本,遇到了一些两种数据库之间的差异,记录一下:

    触发器:

    差异 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 aais

    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;

  • 相关阅读:
    python OptionParser的用法
    Python SMTP发送邮件
    python爬虫时,解决编码方式问题的万能钥匙(uicode,utf8,gbk......)
    logging的基本使用
    基本爬虫
    python socket 基本使用
    python os.walk处理树状目录结构的文件
    关于算法和方案——扯一会儿
    <五>强制关机惹的祸——redhat重装及注册订阅的艰难之路
    018 求完数(初识数组指针)
  • 原文地址:https://www.cnblogs.com/garfieldcgf/p/5885435.html
Copyright © 2011-2022 走看看