一.变量
MSSQL: 有二种类型: 系统变量(@@标识)和用户变量(用@标识), 我们只能自定义用户变量,系统变量是只读的
每一个变量都要用DECLARE来作声明
随用随声明,不需要放在固定位置
声明语法: declare @变量名 类型, 解要求是行声明后赋值
mysql: 在mysql中变量有三种类型: 系统变量、用户变量(前加@)和局部变量(变量名前没有任何标志)
Mysql也采用了随用随声明的方式
pl/sql: 声明语法: DECLARE 变量名 [CONSTANT] 变量类型 [:=默认值]
在PL/SQL中是将变量集中放在一起进行声明的,没有采用MSSQL随用随声明的方式, 也就是说声明时只有
一个declare出现。
二、存储过程
1. 删除已经存在的存储过程
MSSQL: IF EXISTS(SELECT * FROM sysobjects where name='存储过程' )
DROP procedure 存储过程名
GO
MYSQL: DROP PROCEDURE IF EXISTS 存储过程名;
PL/SQL: 创建时直接替换
2. 创建
(1) MSSQL与MySQL没有 or replace选项
(2) 参数:
类型: mssql它的参数分为input和output类型
mysql和oracle 的类型则为 in 和 out
参数类型的存放位置:
mssql中,类型标识符位于变量名和变量类型之后 proc_test(@rowcount) int output)
mysql中,类型标识符位于变量名之前 proc_test(out rowcount int)
oracle中,类型标识符位于变量名和变量类型之间 proc_test(rowcount out int)
参数声明方式:
mssql: 参数名前必须有@
mysql: 参数名前可以用@表示是用户变量, 也可以不加@表示的是局部变量 [推荐用局部变量]
oracle: 参数名前不能有@
参数声明时对字符串长度的处理
mssql: 必须加 varchar(200)
mysql: 必须加 varchar(200)
oracel: 不能指定找度
默认值:
mssql: 可以加默认值的, 只需要在参数类型后加上 "= 值" 就可以了
mysql: 不支持默认值
oracle: 有两种方式: (1) := (2) default
(3)内部变量
A.声明
MSSQL和MYSQL都是采用的随用随声明方式,比较简单。而ORACLE要求在过程体内所使用的变量必须
在As后集中进行声明。
MSSQL和MYSQL声明变量都必须使用DECLARE关键字[mysql中的用户变量可以不用声明,直接使用],
而oracle中声明变量一般不用DECLARE关键字
B.赋值
MSSQL中用set或select ,
MYSQL 可以使用set和select ... into ..为变量赋值, 可以使用"=",也可以使用":="
ORACEL 比较直接,直接用 "变量名 := 变量值"这种方式,当然也可以使用select ... into...
(4)动态语句的处理
MSSQL : exec sp_executesql 动态sql语句,N'动态参数声明',动态参数赋值
MySQL: PREPARE 自定义变量 FROM 动态sql语句;
EXECUTE 自定义变量;
deallocate PREPARE 自定义变量
ORACLE: execute immediate 动态sql语句 [into 输出变量] [using 参数值]
[mylw:]WHILE 表达式 DO
操作语句
END WHILE [mylw];
REPEAT
循环体语句
UNTIL 表达式
END REPEAT;