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

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


这两天写数据库升级脚本,发现MSSQL和Oracle之间的转化还是比较容易的。

以下面两个过程为例。两者的功能相似。

1.MSSQL脚本
1/**//** 更改表名 **/
2Begin
3 declare @tempPoTableName varchar(50) --性能对象表名
4 declare @tempPoSpName varchar(50) --性能过程名
5 declare @errorInfo varchar(200) --错误信息
6 declare @cnt int --计数器
7
8 declare @tempSQL varchar(1000)
9
10 --定义表名、同步表名和存储过程游标
11 set @tempSQL = declare allValues_Cursor cursor for CHAR(13) CHAR(10)
12 set @tempSQL = @tempSQL 0select POTABLENAME,POSPNAME from PM_NEPODEF_TABLE WHERE POID>110499 and POID<110580
13 EXEC (@tempSQL)
14
15 OPEN allValues_Cursor
16
17 --判断是否由符合游标条件的行,如果没有则关闭和释放游标,异常返回
18 IF(@@CURSOR_ROWS = 0 )
19 BEGIN
20 CLOSE allValues_Cursor
21 DEALLOCATE allValues_Cursor
22 set @errorInfo = 没有指定表名或存储过程名!
23 print @errorInfo
24 return
25 END
26
27 print 开始更改原有表名……
28 FETCH NEXT FROM allValues_Cursor INTO @tempPoTableName,@tempPoSpName
29 --根据给定的表名、存储过程名 创建相应的数据存储存储过程
30 WHILE (@@FETCH_STATUS <> -1)
31 BEGIN
32 print @tempPoTableName
33
34 IF (EXISTS (SELECT name from sysobjects WHERE name=@tempPoTableName))
35 BEGIN
36 set @tempSQL = ALTER TABLE @tempPoTableName DROP constraint PK_ @tempPoTableName
37 EXEC (@tempSQL)
38 set @tempSQL = @tempPoTableName _TMP
39 EXEC Sp_rename @tempPoTableName,@tempSQL
40 END
41 ELSE
42 BEGIN
43 print 没有找到表 @tempPoTableName.
44 END
45
46 IF (EXISTS (SELECT name from sysobjects WHERE name=@tempPoSpName))
47 BEGIN
48 set @tempSQL = DROP PROCEDURE @tempPoSpName.
49 EXEC (@tempSQL)
50 END
51 ELSE
52 BEGIN
53 print 没有找到过程 @tempPoSpName.
54 END
55
56 FETCH NEXT FROM allValues_Cursor INTO @tempPoTableName,@tempPoSpName
57 END
58 CLOSE allValues_Cursor
59 DEALLOCATE allValues_Cursor
60 print 结束更改原有表名……
61 print ------------------------
62END
63GO

2.ORACLE脚本

1BEGIN
2DECLARE
3 tempPoTableName varchar2(50). --性能对象表名
4 tempPoSpName varchar2(50). --性能过程名
5 errorInfo varchar2(200). --错误信息
6 tempSQL varchar2(1000).
7 cnt1 number(1).
8 cnt2 number(2).
9
10 --定义表名、同步表名和存储过程游标
11 Cursor allValues_Cursor is
12 0select UPPER(TRIM(POTABLENAME)),UPPER(TRIM(POSPNAME)) from PM_NEPODEF_TABLE WHERE POID>110499 and POID<110580.
13
14BEGIN
15 OPEN allValues_Cursor.
16
17 --判断是否由符合游标条件的行,如果没有则关闭和释放游标,异常返回
18
19 DBMS_OUTPUT.PUT_LINE(开始更改原有表名……).
20 FETCH allValues_Cursor INTO tempPoTableName,tempPoSpName.
21 --根据给定的表名、存储过程名 创建相应的数据存储存储过程
22 WHILE allValues_Cursor%found LOOP
23
24 cnt1:=0.
25 cnt2:=0.
26 BEGIN
27 SELECT 1 INTO cnt1 FROM dual WHERE exists(SELECT table_name FROM user_tables WHERE table_name = tempPoTableName).
28 SELECT 1 INTO cnt2 FROM dual WHERE exists(SELECT OBJECT_NAME FROM user_procedures WHERE OBJECT_NAME = tempPoSpName).
29 exception
30 WHEN no_data_found THEN
31 null.
32 END.
33
34 IF cnt1 = 1 THEN
35 DBMS_OUTPUT.PUT_LINE(tempPoTableName).
36 tempSQL := ALTER TABLE ||tempPoTableName|| DROP constraint PK_||tempPoTableName.
37 EXECUTE IMMEDIATE tempSQL.
38 tempSQL := ALTER TABLE ||tempPoTableName|| RENAME TO ||tempPoTableName||_TMP.
39 EXECUTE IMMEDIATE tempSQL.
40 ELSE
41 DBMS_OUTPUT.PUT_LINE(没有找到表||tempPoTableName).
42 END IF.
43
44 IF cnt2 = 1 THEN
45 tempSQL := DROP PROCEDURE ||tempPoSpName.
46 EXECUTE IMMEDIATE tempSQL.
47 ELSE
48 DBMS_OUTPUT.PUT_LINE(没有找到过程||tempPoSpName).
49 END IF.
50
51 FETCH allValues_Cursor INTO tempPoTableName,tempPoSpName.
52 END LOOP.
53 CLOSE allValues_Cursor.
54 DBMS_OUTPUT.PUT_LINE(结束更改原有表名……).
55 DBMS_OUTPUT.PUT_LINE(------------------------).
56 END.
57END.
58/


相关文章


Oracle快速删除数据字典管理的表空间
Oracle、IBM、BEA服务器测试和比较
Oracle与MSSQL过程之间的转化[2]
一个容易忽视的Oracle数据安全问题
Oracle与MSSQL过程之间的转化[1]
案例学习Oracle错误:ORA-00904[1]
Oracle归档模式的命令及参数说明
oracle中实现自动增长列
针对Oracle10gEM乱码之快速解决方法
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛