• 存储过程&Function
编号 类别 ORACLE MYSQL 注释
1 创建存储过程语句不同 create or replace procedure P_ADD_FAC(
   id_fac_cd  IN ES_FAC_UNIT.FAC_CD%TYPE) is
DROP PROCEDURE IF EXISTS `SD_USER_P_ADD_USR`;
create procedure P_ADD_FAC(
       id_fac_cd  varchar(100))
1.在创建存储过程时如果存在同名的存储过程,会删除老的存储过程.  
  oracle使用create or replace.
  mysql使用先删除老的存储过程,然后再创建新的存储过程.
2. oracle 存储过程可以定义在package中,也可以定义在Procedures中. 如果定义在包中,一个包中可以包含多个存储过程和方法.如果定义在Procedures中,存储过程中不可以定义多个存储过程. 
   Mysql  存储过程中不可以定义多个存储过程.
3. oracle中字符串类型可以使用varchar2.  
   Mysql 需要使用varchar
4. Oracle中参数varchar长度不是必须的,
   Mysql中参数varchar长度是必须的, 比如varchar(100) 
2 创建函数语句不同 CREATE OR REPLACE FUNCTION F_ROLE_FACS_GRP(
     ii_role_int_key IN SD_ROLE.ROLE_INT_KEY%TYPE
    ) RETURN VARCHAR2
DROP FUNCTION IF EXISTS `SD_ROLE_F_ROLE_FACS_GRP`;
CREATE  FUNCTION `SD_ROLE_F_ROLE_FACS_GRP`(
 ii_role_int_key INTEGER(10)
) RETURNS varchar(1000) 
1.在创建函数时如果存在同名的函数,会删除老的函数.  
  oracle使用create or replace.
  mysql使用先删除老的函数,然后再创建新的函数.
2. oracle 函数可以定义在package中,也可以定义在Functions中. 如果定义在包中,一个包中可以包含多个存储过程和函数.如果定义在Functions中,每个函数只能定义一个函数.
   Mysql  Functions不可以定义多个函数. 
3.  oracle返回值用return. 
    Mysql返回值用returns. 
3 传入参数写法不同 procedure P_ADD_FAC(
   id_fac_cd  IN ES_FAC_UNIT.FAC_CD%TYPE)
create procedure P_ADD_FAC(
     (in) id_fac_cd  varchar(100))
1. oracle存储过程参数可以定义为表的字段类型.
   Mysql存储过程不支持这种定义方法.需要定义变量的实际类型和长度.
2. oracle 参数类型in/out/inout写在参数名后面. 
   Mysql  参数类型in/out/inout写在参数名前面.
3. oracle 参数类型in/out/inout 都必须写.
   Mysql  参数类型如果是in,则可以省略. 如果是out或inout则不能省略.
注意: mysql中指定参数为IN, OUT, 或INOUT 只对PROCEDURE是合法的。(FUNCTION参数总是被认为是IN参数) RETURNS字句只能对FUNCTION做指定,对函数而言这是强制的。它用来指定函数的返回类型,而且函数体必须包含一个RETURN value语句。

function func_name(
           gw_id  in(out)  varchar2 )
create function func_name(
       gw_id varchar(100))
4 包的声明方式 create or replace package/package body package name 拆分成多个存储过程或函数 oracle可以创建包,包中可以包含多个存储过程和方法. 
mysql没有没有包这个概念,可以分别创建存储过程和方法. 每个存储过程或方法都需要放在一个文件中. 
例1: 方法命名 
oracle 中SD_FACILITY_PKG.F_SEARCH_FAC 
to mysql SD_FACILITY_F_SEARCH_FAC 
例2: 过程命名
oracle 中SD_FACILITY_PKG.P_ADD_FAC
to mysql SD_FACILITY_P_ADD_FAC 
5 存储过程返回语句不一样 return; LEAVE proc; (proc 代表最外层的begin end) oracle存储过程和方法都可以使用return退出当前过程和方法. 
Mysql存储过程中只能使用leave退出当前存储过程.不可以使用return. 
Mysql方法可以使用return退出当前方法. 
6 存储过程异常处理不一样 EXCEPTION
    WHEN OTHERS THEN
    ROLLBACK ;
    ov_rtn_msg := c_sp_name||'('|| li_debug_pos ||'):'||
        TO_CHAR(SQLCODE)||': '||SUBSTR(SQLERRM,1,100);
DECLARE EXIT HANDLER FOR  SQLEXCEPTION 
 BEGIN
    ROLLBACK ;
    set ov_rtn_msg = concat(c_sp_name,'(', li_debug_pos ,'):',
        TO_CHAR(SQLCODE),': ',SUBSTR(SQLERRM,1,100));
 END;
oracle : 内部异常不需要定义,在存储过程或函数末尾写上EXCEPTION后,后面的部分即为异常处理的部分.  oracle可以定义自定义异常,自定义异常需要使用raise关键字抛出异常后,才可以在EXCEPTION中捕获.

mysql: mysql内部异常也需要先定义,在定义的同时也需要实现异常的功能. 
          目前mysql不支持自定义异常. 

7 过程和函数的声明变量的位置不同 声明变量在begin…end体之前 声明变量在begin...end体内,begin之后其他任何内容之前  
8 NO_DATA_FOUND异常处理  EXCEPTION
        WHEN NO_DATA_FOUND THEN
            oi_rtn_cd := 1;
            ov_rtn_msg := SD_COMMON.P_GET_MSG('DP-CBM-01100a-016',
                                                 li_sub_rtn_cd,
                                                 lv_sub_rtn_msg
                                                 );
使用FOUND_ROWS()代替NO_DATA_FOUND. 详见注释. oracle中: 
NO_DATA_FOUND是游标的一个属性. 
当select没有查到数据就会出现 no data found 的异常,程序不会向下执行.

Mysql: 
没有NO_DATA_FOUND这个属性.但可是使用FOUND_ROWS()方法得到select语句查询出来的数据.如果FOUND_ROWS()得到的值为0,就进入异常处理逻辑. 

9 在存储过程中调用存储过程方式的不同 Procedure_Name(参数); Call Procedure_Name(参数); MYSQL存储过程调用存储过程,需要使用Call pro_name(参数).  
Oracle调用存储过程直接写存储过程名就可以了. 
10 抛异常的方式不同 RAISE Exception_Name; 见备注 详见<<2009002-OTMPPS-Difficult Questions-0001.doc>>中2.5 Mysql异常处理部分

来自 : http://www.cnblogs.com/HondaHsu/p/3641258.html

存储过程&Function的更多相关文章

  1. MySQL与Oracle 差异比较之五存储过程&Function

    存储过程&Function 编号 类别 ORACLE MYSQL 注释 1 创建存储过程语句不同 create or replace procedure P_ADD_FAC(   id_fac ...

  2. Oracle procedure存储过程/function函数

    --函数的创建 create function func1(dno number) return NUMBER--必须带有返回值 is v_max number;--定义返回值 begin selec ...

  3. Oracle存储过程function语法及案例

    create or replace function F01_SX03_SUM(statdate varchar2, code varchar2, para varchar2) RETURN numb ...

  4. firedac的TFDStoredProc动态创建并调用存储过程

    1)中间件执行存储过程 sp.Close; sp.StoredProcName := procName; sp.Prepare;  // 生成存储过程的参数列表,无任何OUTPUT的存储过程,也会自动 ...

  5. LINQ To SQL

    议程 1.LINQ To SQL概述 2.LINQ To SQL对象模型 3.LINQ To SQL查询 用到的数据库 SQL Server 2005,数据库名为Test. 两张表,分别为Studen ...

  6. 讲讲Linq to SQL映射(基础篇)

    讲讲Linq to SQL映射(基础篇) 这篇主要讲Linq to  SQL基于属性的映射.即映射数据库,映射表,映射列,映射关系,映射存储过程, 映射函数.然而创建这种映射有三种方法,他们分别是OR ...

  7. 一些常用的mysql语句实例-以后照写2

    specification: 规范, 规格, 产品规范, 产品规格, 技术规范, 产品说明书. 如: create_specification, 等等 创建数据库时, 显式地指明, 字符集: crea ...

  8. Postgresql添加/删除触发器示例

    -- 定义触发器 CREATE TRIGGER "vss_after_insert_flow_201702" AFTER INSERT ON "public". ...

  9. Delphi简单的数据操作类

    unit MyClass; uses   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,   VCL ...

随机推荐

  1. C++ ORM ODB 入门(三)

    本节介绍ODB的事务与 异常. 数据库操作经常涉及到操作多个表格,或者表格中的多行数据.因此必须保证整个过程是原子性的.ODB为数据库的事务提供了易于使用的接口. 使用odb::databse的相关方 ...

  2. 截获导航控制器系统返回按钮的点击pop及右滑pop事件

    前几天看了@栾小布的一篇文章:Custom backBarButtonItem,在跟着做的时候我又顺便扩展了一些,写此文章的目的是为了总结一下自己所写的东西,方便以后翻看容易,同时也是自己入行iOS一 ...

  3. last_9t's_ramsey

    cannot finish his face

  4. acmer -- 最美的情书

    2014-09-29 20:51:45 POJ 2482 Fleeting time does not blur my memory of you. Can it really be 4 years ...

  5. freewrap——将tcl/tk脚本转变为可执行文件

     FreeWrap可以把TCL/TK的脚本和二进制文件打包成应用程序,FreeWrap将所有的文件组合成一个单独的可执行文件.     FreeWrap的原理是把脚本和tcl/tk解释器和库文件都打包 ...

  6. nyoj 33 蛇形填数

    蛇形填数 时间限制:3000 ms  |            内存限制:65535 KB 难度:3   描述 在n*n方陈里填入1,2,...,n*n,要求填成蛇形.例如n=4时方陈为: 10 11 ...

  7. 定时执行Timer

    JAVA import java.awt.event.*; import java.io.BufferedWriter;import java.io.File;import java.io.FileO ...

  8. java 静态方法

    在使用java的时候,你会发现,有些对象,需要new ,有些则不需要时,比如Math类 ); 如果你查看源码就会大致的发现,里面的属性和方法都是静态的: public static double si ...

  9. 20151214 jquery插件代码备份

    ;(function ($) { //局部性的 /*$.fn.extend({ 'nav' : function (color) { $(this).find('.nav').css({ 'list- ...

  10. 推荐几款提高.net编程效率的辅助工具

    1.Resharper ReSharper是一个JetBrains公司出品的著名的代码生成工具,其能帮助Microsoft Visual Studio成为一个更佳的IDE.它包括一系列丰富的能大大增加 ...