暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

三种数据库存储过程定义差异分析

数据库精要 2021-09-27
1079

三种数据库都支持使用存储过程,但是定义和创建语法有不少区别,下面从10个方面阐释以下过程定义的差异,在定义和使用过程中需要注意:


1声明

三种数据库创建存储过程都可以使用 CEATE PROCEDURE 存储过程名实现。

oracle:

CREATE [ OR REPLACE ] PROCEDURE

sqlserver:

create proc | procedure

mysql:

CEATE PROCEDURE

2、参数定义

参数都分三种类型:输入、输出、输入输出,输入输出参数关键字不一样,sqlserver的输入输出参数关键字是 output,其它两个是inout;

描述参数类型的位置不同,oracle: 参数名 in 数据类型;sqlserver: @参数 数据类型 out;mysql:IN 参数名 数据类型;参数命名方式不同:oracle和mysql是直接命名,sqlserver参数名前带@;

oracle 和 mysql的参数跟在存储过程名后面,需要用括号引起来,sqlserver直接跟在存储过程名后,不需要括号。

3、变量定义

oracle 变量定义在is关键字和程序段开始begin 之间,每个变量一行,变量直接命名;sqlserver 变量在as之后任意位置,变量也需要加@标示,sqlserver变量支持多个同类型变量用“,”分开一起定义;

mysql变量在程序段begin之后的任意位置。支持多个同类型变量用“,”号分开定义到一起。 

4、变量的赋值

oracle: 变量 := 值;sqlserver:select @变量=值 或者 set @变量=值;mysql: set 变量=值或者 set 变量 :=值;

oracle和mysql 数据库都支持select 字段 into 变量 的方式对变量进行赋值,sqlserver使用 select @变量=column from  table where 条件 方式赋值;

5、别名 

oracle 的字段和表的别名不能用 as 关键字,直接字段名表名 后跟别名,sqlserver和mysql 定义字段别名可以加as 关键字,也可以不加;

6、输出结果集

oracle 必须使用游标参数才能返回结果集。sqlserver和mysql直接使用select语句即可返回结果集;

7、临时表

由于oracle 存储过程内部不支持ddl语言,所以oracle存储过程使用临时表时需要用动态sql创建,sqlserver和mysql可以直接创建,但是mysql使用完需要显式删除临时表;

8、存储过程的调用执行

oracle和mysql都支持使用call 或者exec调用执行存储过程,sqlserver 不支持call ,另外oracle和mysql不管有没有参数,存储过程名后都需要加(),sqlserver 不需要,另外mysql参数不支持默认值,所以调用时有参数必须赋值,如果没有值可以使用null代替;

9、sqlserver 可以使用with encryption语句对存储过程进行加密; 

10、具体的程序流程控制语法区别单独讲解过,可以参看本公众号以前文章。

扫码移步知识星球,学习更多数据库知识:



文章转载自数据库精要,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论