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;

  • 相关阅读:
    Trie
    [转]Tarjan应用:求割点/桥/缩点/强连通分量/双连通分量/LCA(最近公共祖先)
    [Bzoj2242]常见数值算法
    JavaScript百炼成仙(记录笔记)
    tcpreplay重放报文,tcpdump能抓到包,应用程序收不到包
    用jquery tools来实现选项卡
    ExtNet第二篇
    线性表最简单的表示
    c语言中线性表基本操作方法
    ExtNet第一篇
  • 原文地址:https://www.cnblogs.com/garfieldcgf/p/5885435.html
Copyright © 2011-2022 走看看