三种数据库都支持使用存储过程,但是定义和创建语法有不少区别,下面从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、具体的程序流程控制语法区别单独讲解过,可以参看本公众号以前文章。
扫码移步知识星球,学习更多数据库知识:




