oracle与mysql的存储区别

news/2024/11/28 16:28:16/

1.创建存储过程语句不同

oracle

create or replace procedure P_ADD_FAC(id_fac_cd  IN ES_FAC_UNIT.FAC_CD%TYPE)  as

复制

mysql

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,创建函数语句不同

oracle

CREATE OR REPLACE FUNCTION F_ROLE_FACS_GRP(ii_role_int_key IN SD_ROLE.ROLE_INT_KEY%TYPE) RETURN VARCHAR2

复制

mysql

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.传入参数写法不同

oracle

 1.   procedure P_ADD_FAC(id_fac_cd  IN ES_FAC_UNIT.FAC_CD%TYPE)2.    function func_name(gw_id  in(out)  varchar2 )

复制

mysql

1.create procedure P_ADD_FAC((in) id_fac_cd  varchar(100))2.create function func_name(gw_id 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语句。

4.包的声明方式

oracle

create or replace package/package body package name

复制

mysql

拆分成多个存储过程或函数

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.存储过程返回语句不一样

oracle

return;	

复制

mysql

LEAVE proc; (proc 代表最外层的begin end)

复制

oracle存储过程和方法都可以使用return退出当前过程和方法. Mysql存储过程中只能使用leave退出当前存储过程.不可以使用return. Mysql方法可以使用return退出当前方法.

6.存储过程异常处理不一样

oracle

EXCEPTIONWHEN OTHERS THENROLLBACK ;ov_rtn_msg := c_sp_name||'('|| li_debug_pos ||'):'||TO_CHAR(SQLCODE)||': '||SUBSTR(SQLERRM,1,100);

复制

mysql

DECLARE EXIT HANDLER FOR  SQLEXCEPTION BEGINROLLBACK ;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.过程和函数的声明变量的位置不同

oracle

声明变量在begin…end体之前

复制

mysql

声明变量在begin...end体内,begin之后其他任何内容之前

复制

8.NO_DATA_FOUND异常处理

oracle

 EXCEPTIONWHEN NO_DATA_FOUND THENoi_rtn_cd := 1;ov_rtn_msg := SD_COMMON.P_GET_MSG('DP-CBM-01100a-016',li_sub_rtn_cd,lv_sub_rtn_msg);

复制

mysql

使用FOUND_ROWS()代替NO_DATA_FOUND. 详见注释.

复制

oracle中: NO_DATA_FOUND是游标的一个属性. 当select没有查到数据就会出现 no data found 的异常,程序不会向下执行.

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

9.在存储过程中调用存储过程方式的不同

oracle

Procedure_Name(参数);

复制

mysql

Call Procedure_Name(参数);

复制

MYSQL存储过程调用存储过程,需要使用Call pro_name(参数). Oracle调用存储过程直接写存储过程名就可以了.

10抛异常的方式不同

oracle

RAISE Exception_Name;

复制


http://www.ppmy.cn/news/141125.html

相关文章

2021年中国电吹风零售数量、金额及专利申请数量情况分析[图]

一、吹风机零售情况 吹风机是由一组电热丝和一个高转速小风扇组合而成的。通电时,电热丝会产生热量,风扇吹出的风经过电热丝,就变成热风。如果只是小风扇转动,而电热丝不热,那么吹出来的就只是风而不热了。2021年中国…

小程序或者Uniapp保存图片异常 - Ios系统

发现部分图片通过 saveImageToPhotosAlbum 接口无法保存,报错信息如下 saveImageToPhotosAlbum:fail [Gallery:-1]未能完成操作。(PHPhotosErrorDomain错误-1。) 因为都是网络图片, 前置需要通过 downloadFile 接口下载,拿到临时路径&#xf…

Java8 Collectors类详解(二)

Java8 Collectors类详解(一) 统计 counting() Collectors.counting() 是 Java 8 中提供的一个工厂方法,用于创建一个统计流中元素个数的 Collector。该方法返回一个 Collector 实现,可以被传递给 Stream 的 collect 方法用于执行…

2.矢量分析

目录 一.标量函数和矢量函数 二.矢端曲线 三.矢量函数导数和微分 1.导数 2.导数的几何意义 3.微分 4.矢量导数性质 5.例题 四.矢量导数的应用 1.几何应用 1.曲线的切线和法平面 2.曲面的法线和法平面 2.物理应用 3.两大典型问题 五.矢量函数的积分 如果第一章我…

文件夹永久删除怎么恢复

电脑已经成为生活中必不可少的一部分。我们通常会使用电脑来存储和管理各种重要的文档和文件。但是,随着我们使用电脑的次数增加,难免会清理,如果不小心删除了我们的文件夹。在这种情况下,我们可能会有一些后怕,当我们…

PIC 使能485/422笔记(修订中...)

1.需求 工作中需要把目前设备的单向232转为485/422模式,实现双向通讯,目前查找相关资料。突然想到一件事,我是否能让232现有的单向上发线同时连工控机的tx,rx,然后靠协议,来定时切换PIC一侧的tx rx?PIC可能不支持这个…

canvas实现时钟效果

写的时候遇到的下列几个问题: 1、api了解不深刻,如requestAnimationFrame const fn ()>{ //requestAnimationFrame(fn())//错误的写法 requestAnimationFrame(fn)//正确的写法 }2、关于下面的clear函数(清除动画)与update(更新时间数据)函数&#xf…

C++primerplus习题+答案

1.下面建立友元的尝试有什么错误? a. class snap { friend clasp; …… }; class clasp{……}; 声明一个友元类需要使用以下格式 friend class clasp; 题目内没有使用关键字class,从而造成编译错误。 b. class cuff { public: void snip(muf…