Oracle与MSSQL过程之间的转化[2]

文章作者 100test 发表时间 2007:03:14 14:03:06
来源 100Test.Com百考试题网


上面两个是无名存储过程,不需要考虑是否已经存在该过程。对于有名的过程需要考虑对象是否已经存在。
我是从MSSQL向Oracle转化的。
第一步,修改整体结构。
MSSQL的总体结构如下,只需要一个begin和end,中间加入变量声明。


1Begin
2 declare --变量
3 --过程
4END
5GO

Oralce的总体结构如下,需要两个begin和end,一个是整个过程,一个是除去申明之外的过程。

1BEGIN
2 DECLARE
3 --变量
4 BEGIN
5 --过程
6 END.
7END.
8/


第二步,修改声明变量。
MSSQL需要在每个变量前面加 declare标示,Oracle只需要一个declare标示。此外注意修改各自的数据类型。

第三步,修改游标。复杂的过程中离不开游标。因此更改游标结构经常用到。
MSSQL的游标是全局的,需要建立之后再清空。而Oracle的游标类似于局部变量,使用完之后,自动清除。
MSSQL游标结构如下:

set @tempSQL = declare allValues_Cursor cursor for CHAR(13) CHAR(10)
set @tempSQL = @tempSQL 0select POTABLENAME,POSPNAME from PM_NEPODEF_TABLE WHERE POID>110499 and POID<110580
--游标语句

EXEC (@tempSQL)
--1.创建游标

OPEN allValues_Cursor
--2.打开游标

--判断是否由符合游标条件的行,如果没有则关闭和释放游标,异常返回
IF(@@CURSOR_ROWS = 0 )
BEGIN
CLOSE allValues_Cursor
DEALLOCATE allValues_Cursor
set @errorInfo = 没有指定表名或存储过程名!
print @errorInfo
return
END

WHILE (@@FETCH_STATUS <> -1)
BEGIN
FETCH NEXT FROM allValues_Cursor INTO @tempPoTableName,@tempPoSpName
--3进行数据处理

END

CLOSE allValues_Cursor
--4.关闭游标

DEALLOCATE allValues_Cursor
--5.注销游标

Oracle的游标是在变量中声明定义的,然后在过程中使用。其结构如下:

1--声明中
2 Cursor allValues_Cursor is
3 0select UPPER(TRIM(POTABLENAME)),UPPER(TRIM(POSPNAME)) from PM_NEPODEF_TABLE WHERE POID>110499 and POID<110580.
4 --1.声明游标
5--过程中
6 OPEN allValues_Cursor.
7 --2.打开游标
8
9 WHILE allValues_Cursor%found LOOP
10 FETCH allValues_Cursor INTO tempPoTableName,tempPoSpName.
11 --3.处理数据
12
13 END LOOP.
14 CLOSE allValues_Cursor.
15 --4.关闭游标

第四步修改赋值语句和比较语句。MSSQL中使用Set语句来赋值,Oracle中使用:=来赋值。此外MSSQL中的变量习惯前面增加一个@字符,在Oracle中可以删除。
第五步修改逻辑结构。MSSQL中使用IF()....ELSE....
,结构体之间都要用BEGIN和END框起来。而Oracle则使用IF...THEN...ELSE..END IF结构,中间不必使用BEGIN和END。此外While结构差别也类似。
第六步修改各自的调用方法和函数。常见的是MSSQL的EXEC (@tempSQL),对应Oracle的EXECUTE IMMEDIATE tempSQL。MSSQL的print函数,对应Oracle的DBMS_OUTPUT.PUT_LINE()函数。此外还有各自使用的数据表,有所不同。例如MSSQL中所有的对象都在sysobjects表中,而Oracle中的表在user_tables中,过程在user_procedures中等。这些需要积累一些经验。

最后不要忘了检查,Oracle的所有句子,必须要有分号表示结束。而MSSQL中不需要,即使加了也不错。几步下来,MSSQL过程就转化成Oracle。



相关文章


在Oracle数据库中连接异种数据源
需要考虑的数据库相关安全政策
Oracle快速删除数据字典管理的表空间
Oracle、IBM、BEA服务器测试和比较
Oracle与MSSQL过程之间的转化[2]
一个容易忽视的Oracle数据安全问题
Oracle与MSSQL过程之间的转化[1]
案例学习Oracle错误:ORA-00904[1]
Oracle归档模式的命令及参数说明
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛