SQLServervsOracle存储过程语法转换1﹒2.docVIP

  • 4
  • 0
  • 约9.18千字
  • 约 17页
  • 2017-05-06 发布于北京
  • 举报
SQLServervsOracle存储过程语法转换1﹒2

一、SQL Server vs Oracle 简单语法比较 此为本人将ORACLE 函数和存储过程转换为SQL SERVER遇到的一些语法问题的经验总结,肯定不能包括所有的语法不同点。 注: 简单的语法异同 1、SQL SERVER变量 必须以@开头。 2、SQL SERVER语句后不需要写分号结束符。 3、oracle变量类型number 可以修改为sql server的decimal 4、oracle变量类型varchar2 可以修改为sql server的varchar 5、SQL SERVER定义变量 及传递参数,最好加上参数大小数值,例如:varchar(50) 5、SQL SERVER 不能用ROWID, ROWNUM (但可以用TOP代替) 6、oracle里的nvl函数,在SQL SERVER里使用ISNULL函数取代 7、SQL SERVER自定义函数不允许修改全局表数据(只允许修改自定义函数范围内表数据), 所以发生表修改的 最好用存储过程实现而非函数。 1 create函数或存储过程异同点 Oracle 创建函数或存储过程 一般是 create or replace …… SQL SERVER 则是在创建之前加一条语句,先判断是否已经存在,如果存在删除已有的函数或存储过程。 函数语句 if exists (select * from dbo.sysobjects where id = object_id(N[dbo].[函数名]) and xtype in (NFN, NIF, NTF)) drop function [dbo].[函数名] GO 存储过程 if exists (select * from dbo.sysobjects where id = object_id(N[dbo].[存储过程名]) and OBJECTPROPERTY(id, NIsProcedure) = 1) drop procedure [dbo].[存储过程名] GO 2 结构异同点 ORACLE Create 部分 IS 定义部分 BEGIN … END; 实现部分 SQL SERVER Create 部分 AS 定义和实现部分 (AS 下面的代码一般用BEGIN … END 包含) 3 调用参数 ORACLE输入参数 参数名In 参数类型 ORACLE输出参数 参数名Out 参数类型 SQL SERVER输入参数 参数名 参数类型 IN(IN可以不写,系统默认) SQL SERVER输出参数 参数名 参数类型 OUTPUT 4 变量命名及赋值 ORACLE 1、变量名 随便取 2、定义格式为 变量名 变量类型; 3、给变量赋值为 变量名 := 值; SQL SERVER 1、变量名前面一般加@ 2、定义格式为 declare 变量名 变量类型 3、SET变量名 =变量类型 5 IF语句 ORACLE IF … THEN …. ELSE ... END IF; SQL SERVER IF ... BEGIN …… END ELSE BEGIN …… END 或者 IF ... BEGIN …… END ELSE BEGIN …… END 6 case语句 ORACLE IF … THEN …. ELSE ... END IF; SQL SERVER IF ... BEGIN …… END ELSE BEGIN …… END 或者 IF ... BEGIN …… END ELSE BEGIN …… END 7 游标的定义及使用 及循环操作 ORACLE定义游标 CURSOR CurA IS SELECT a FROM tab where … ; SQL SERVER定义游标 DECLARE CurA CURSOR LOCAL FOR SELECT a FROM tab where … ; ORACLE使用游标 Open CurA; -- 打开游标 Fetch CurA Into ISUserUnitPri; IF CurA%NOTFOUND THEN -- 注:如果为CurA%FOUND,看下面相同位置注释 ISUserUnitPri := 1; END IF; Close CurA; -- 关闭游标 SQL SERVER使用游标 Open CurA -- 打开游标 Fetch next from CurA Into @ISUserUnitPri IF @@fetch

文档评论(0)

1亿VIP精品文档

相关文档