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;

  • 相关阅读:
    ASP.NET程序中常用的三十三种代码[低]
    IIS 6.0 优化
    JS判断数字字母中文
    javascript函数
    ASPJpeg和ASPUpload组件的一些属性和方法
    DOMDocument 的属性及一些javascript操作方法
    HTML/JS代码集合
    SEO常用工具站
    C#操作Word/excel文档
    高效的Session读写.
  • 原文地址:https://www.cnblogs.com/garfieldcgf/p/5885435.html
Copyright © 2011-2022 走看看