Oracle与MSSQL过程之间的转化(1)
这两天写数据库升级脚本,发现MSSQL和Oracle之间的转化还是比较容易的。
以下面两个过程为例。两者的功能相似。
1.MSSQL脚本
/** 更改表名 **/
Begin
declare @tempPoTableName varchar(50) --性能对象表名
declare @tempPoSpName varchar(50) --性能过程名
declare @errorInfo varchar(200) --错误信息
declare @cnt int --计数器
declare @tempSQL varchar(1000)
--定义表名、同步表名和存储过程游标 set @tempSQL = ' declare allValues_Cursor cursor for '+CHAR(13) + CHAR(10)
set @tempSQL = @tempSQL + ' select POTABLENAME,POSPNAME from PM_NEPODEF_TABLE
WHERE POID>110499 and POID<110580'EXEC (@tempSQL)
OPEN allValues_Cursor
--判断是否由符合游标条件的行,如果没有则关闭和释放游标,异常返回 IF(@@CURSOR_ROWS = 0 )
BEGIN
CLOSE allValues_Cursor
DEALLOCATE allValues_Cursor
set @errorInfo = '没有指定表名或存储过程名!'
print @errorInfo
return
END
print '开始更改原有表名……'
FETCH NEXT FROM allValues_Cursor INTO @tempPoTableName,@tempPoSpName
--根据给定的表名、存储过程名 创建相应的数据存储存储过程
WHILE (@@FETCH_STATUS <> -1)
BEGIN
print @tempPoTableName
IF (EXISTS (SELECT name from sysobjects WHERE name=@tempPoTableName))
BEGIN
set @tempSQL = 'ALTER TABLE '+ @tempPoTableName+' DROP
constraint PK_'+@tempPoTableName
EXEC (@tempSQL)
set @tempSQL = @tempPoTableName+'_TMP'
EXEC Sp_rename @tempPoTableName,@tempSQL
END
ELSE
BEGIN
print '没有找到表'+@tempPoTableName;
END
IF (EXISTS (SELECT name from sysobjects WHERE name=@tempPoSpName)) BEGIN
set @tempSQL = 'DROP PROCEDURE '+@tempPoSpName;
EXEC (@tempSQL)
END
ELSE
BEGIN
print '没有找到过程'+@tempPoSpName;
END
FETCH NEXT FROM allValues_Cursor INTO @tempPoTableName,@tempPoSpName END
CLOSE allValues_Cursor
DEALLOCATE allValues_Cursor
print '结束更改原有表名……'
print '------------------------'
ENDGO



