oracle与mysql的存储区别

这篇具有很好参考价值的文章主要介绍了oracle与mysql的存储区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

EXCEPTION
    WHEN OTHERS THEN
    ROLLBACK ;
    ov_rtn_msg := c_sp_name||'('|| li_debug_pos ||'):'||
        TO_CHAR(SQLCODE)||': '||SUBSTR(SQLERRM,1,100);

复制

mysql

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.过程和函数的声明变量的位置不同

oracle

声明变量在begin…end体之前

复制

mysql

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

复制

8.NO_DATA_FOUND异常处理

oracle

 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
                                                 );

复制

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;

复制文章来源地址https://www.toymoban.com/news/detail-471902.html

到了这里,关于oracle与mysql的存储区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Oracle和MySQL有哪些区别?从基本特性、技术选型、字段类型、事务、语句等角度详细对比Oracle和MySQL

     导航: 【Java笔记+踩坑汇总】Java基础+进阶+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud+黑马旅游+谷粒商城+学成在线+MySQL高级篇+设计模式+面试题汇总+源码_vincewm的博客-CSDN博客 目录 一、基本区别 1.1 基本特性 1.2 Oracle和MySQL如何做技术选型? 1.3 RDBMS和ORDBMS的区别 1.4 默认端口号和用

    2024年02月12日
    浏览(32)
  • mysql:存储过程的创建与使用

    一、创建存储过程 使用MySql Workbench创建存储过程,一定要记得使用 delimiter 指明结束符,否则会报错:Statement is incomplete, expecting: \\\';’ 错误示例: 正确示例: 其中,//就是结束符,可以自行指定,比如一般都用$$。 二、存储过程语法 这里就不照搬官方的语法了,按照我的理

    2024年02月09日
    浏览(29)
  • MySQL系列(九)存储过程的创建和使用

    (1)利用预处理sql语句输出teacher表中前n行记录,执行预处理命令时具体输出前5行的数据。 (2)利用预处理sql语句,更改course表中课程号为c05109的课程名称为“数据库系统原理”。 (3)创建存储过程update_email,修改student表中姓名为‘封月明’的学生的email为‘feng@qq.com’。

    2024年02月13日
    浏览(26)
  • Mysql 创建存储过程和函数及各种例子

    1.1.1 语法结构 无参的存储过程 有参数的存储过程 删除存储过程: 1.1.2 简单解释 部分语法简单介绍: delimiter $$ $$ 是分隔符,用其他符号也行,比如一个 $ 或者 // 等 定义变量: DECLARE 例子: @符号 使用 SET 直接赋值变量,变量名以 @ 开头:如: set @dogNum = 1002; 其他使用例子如

    2024年02月06日
    浏览(28)
  • 【⑯MySQL | 存储过程与函数】概述 | 创建 | 调用 | 查看 | 修改 | 删除 | 争议

    ✨欢迎来到小K的MySQL专栏,本节将为大家带来MySQL存储过程与函数概述 | 创建 | 调用 | 查看 | 修改 | 删除 | 争议的分享 ✨ MySql从5.0版本开始支持存储过程和函数,存储过程和函数能够将复杂的SQL逻辑封装在一起,应用程序无须关注存储过程和函数内部复杂的SQL逻辑,而只需要

    2024年02月10日
    浏览(43)
  • MySQL数据库——存储过程-介绍以及基本语法(特点、创建、调用、查看、删除、示例)

    目录 介绍 特点 基本语法 创建 调用 查看 删除  示例  存储过程是 事先经过编译 并 存储在数据库 中的一段 SQL 语句的 集合 ,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。 存储过程思想

    2024年02月06日
    浏览(46)
  • MySQL强制使用索引的两种方式及优化索引,使用MySQL存储过程创建测试数据。

    一、MySQL强制使用索引的两种方式 1、使用 FORCE INDEX 语句: 使用 FORCE INDEX(索引名称)走索引: 2、使用 USE INDEX 语句: 使用 USE INDEX(索引名称)走索引: FORCE INDEX 或 USE INDEX 的区别? FORCE INDEX :这个语句指示MySQL强制查询使用特定的索引。它会忽略优化器的选择,无论索引

    2024年02月03日
    浏览(39)
  • 数据库系统原理及MySQL应用教程实验七存储过程与函数的创建管理

    1. 理解存储过程和函数的概念。 2. 掌握创建存储过程和函数的方法。 3. 掌握执行存储过程和函数的方法。 4. 掌握游标的定义、使用方法。 1.验证性实验:某超市的食品管理的数据库的Food表对其操作。 2.设计性试验:学校教师管理数据库中的teacherInfo表对其操作。 三、实验步

    2024年02月03日
    浏览(42)
  • oracle存储过程(基础语法)

            存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何一个设计良好的数据库应用程序都应该用到存储过

    2023年04月08日
    浏览(35)
  • Oracle存储过程~封神之路

    Oracle 存储过程是 Oracle 数据库中的一种数据处理对象,它可以在数据库中定义一组预定义的 SQL 语句,用于完成特定的数据库操作。存储过程可以被授权的用户调用,并且可以执行多个语句,这些语句可以被视为一个单独的操作,也可以被视为一系列的操作。 使用存储过程可

    2024年02月04日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包