• 存储过程&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. Map的遍历方式

    public class Mapper { public static void main(String[] args) {  Map<String, String> map = new ...

  2. 使用logminer分析日志文件

    实验环境 win7 64  oracle PL/SQL Release 11.2.0.1.0 - Productionhttp://blog.csdn.net/tianlesoftware/artic ...

  3. Orcle11g用户密码恢复

    1.当安装Orcle11g后,很久不用,忘记了用户名和密码.可以通过以下方法重置: 如上图及重置用户sys,system密码为123

  4. sbit命令行中运行scala脚本

    一般sbit编译器采成了scala运行工具.启动sbit命令行,输入console,命令行自动切换到scala编辑器面. scala>:paste 然后手动将XXX.scala中的代码拷贝到界面 ...

  5. JavaScript平常会跳的坑系列(一)

    function Foo() { //定义foo函数 getName = function () { console.log('1');}; console.log(this); return thi ...

  6. 编译inotify报错

    错误如下: configure: error: no acceptable C compiler found in $PATH 这是因为没有找到编译器的原因造成的 解决方法: 安装gcc [root@ ...

  7. mysql的having语句

    mysql> use qq; Database changed mysql> #查询本店价比市场价省的钱,并且要求省钱200元以上的取出来 mysql> select goods_i ...

  8. 万网免费主机wordpress快速建站教程-域名绑定及备案

    进入主机管理界面,点击管理 点击域名绑定,绑定域名项选择已有域名,选择已购买的域名,点击一键解析域名,点击添加,即可完成域名解析工作. 由于没有备案,备案状态显示为未备案,点击旁边的备案链接,跳转至阿 ...

  9. 错误编码 = 10022 错误消息 = SDK 组件 Qupaisdk 启动出错,错误消息为 [Qupaisdk], the android stack error message is Fail to start the plugin, which is caused by No implem

     so没有load到.几个可能,1.缺少so--在群共享下载拷贝到armeabi-v7a 2.so没有打入apk--检查打出来的apk.解压打开看下libs下面有没有so. 3.abi平台问题.检查平 ...

  10. (转)Cookies使用

    实际上,在web开发中,cookie仅仅是一个文本文件,当用户访问站点时,它就被存储在用户使用的计算机上,其中,保存了一些信息,当用户日后再次访问这个站点时,web可以将这些信息提取出来. 尽管现在听 ...