知识大全 Oracle与MSSQL过程之间的转化
Posted 过程
篇首语:只会幻想而不行动的人,永远也体会不到收获果实时的喜悦。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle与MSSQL过程之间的转化相关的知识,希望对你有一定的参考价值。
Oracle与MSSQL过程之间的转化 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
这两天写数据库升级脚本 发现MSSQL和Oracle之间的转化还是比较容易的 以下面两个过程为例 两者的功能相似 MSSQL脚本 /**//** 更改表名 **/ Begin declare @tempPoTableName varchar( ) 性能对象表名 declare @tempPoSpName varchar( ) 性能过程名 declare @errorInfo varchar( ) 错误信息 declare @cnt int 计数器 declare @tempSQL varchar( ) 定义表名 同步表名和存储过程游标 set @tempSQL = declare allValues_Cursor cursor for +CHAR( ) + CHAR( ) set @tempSQL = @tempSQL + select POTABLENAME POSPNAME from PM_NEPODEF_TABLE WHERE POID> and POID< EXEC (@tempSQL) OPEN allValues_Cursor 判断是否由符合游标条件的行 如果没有则关闭和释放游标 异常返回 IF(@@CURSOR_ROWS = ) 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 <> ) 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 END GOORACLE脚本
BEGIN DECLARE tempPoTableName varchar ( ); 性能对象表名 tempPoSpName varchar ( ); 性能过程名 errorInfo varchar ( ); 错误信息 tempSQL varchar ( ); cnt number( ); cnt number( ); 定义表名 同步表名和存储过程游标 Cursor allValues_Cursor is select UPPER(TRIM(POTABLENAME)) UPPER(TRIM(POSPNAME)) from PM_NEPODEF_TABLE WHERE POID> and POID< ; BEGIN OPEN allValues_Cursor; 判断是否由符合游标条件的行 如果没有则关闭和释放游标 异常返回 DBMS_OUTPUT PUT_LINE( 开始更改原有表名…… ); FETCH allValues_Cursor INTO tempPoTableName tempPoSpName; 根据给定的表名 存储过程名 创建相应的数据存储存储过程 WHILE allValues_Cursor%found LOOP cnt := ; cnt := ; BEGIN SELECT INTO cnt FROM dual WHERE exists(SELECT table_name FROM user_tables WHERE table_name = tempPoTableName); SELECT INTO cnt FROM dual WHERE exists(SELECT OBJECT_NAME FROM user_procedures WHERE OBJECT_NAME = tempPoSpName); exception WHEN no_data_found THEN null; END; IF cnt = THEN DBMS_OUTPUT PUT_LINE(tempPoTableName); tempSQL := ALTER TABLE ||tempPoTableName|| DROP constraint PK_ ||tempPoTableName; EXECUTE IMMEDIATE tempSQL; tempSQL := ALTER TABLE ||tempPoTableName|| RENAME TO ||tempPoTableName|| _TMP ; EXECUTE IMMEDIATE tempSQL; ELSE DBMS_OUTPUT PUT_LINE( 没有找到表 ||tempPoTableName); END IF; IF cnt = THEN tempSQL := DROP PROCEDURE ||tempPoSpName; EXECUTE IMMEDIATE tempSQL; ELSE DBMS_OUTPUT PUT_LINE( 没有找到过程 ||tempPoSpName); END IF; FETCH allValues_Cursor INTO tempPoTableName tempPoSpName; END LOOP; CLOSE allValues_Cursor; DBMS_OUTPUT PUT_LINE( 结束更改原有表名…… ); DBMS_OUTPUT PUT_LINE( ); END; END; /上面两个是无名存储过程 不需要考虑是否已经存在该过程 对于有名的过程需要考虑对象是否已经存在 我是从MSSQL向Oracle转化的 第一步 修改整体结构 MSSQL的总体结构如下 只需要一个begin和end 中间加入变量声明
Begin declare 变量 过程 END GOOralce的总体结构如下 需要两个begin和end 一个是整个过程 一个是除去申明之外的过程
BEGIN DECLARE 变量 BEGIN 过程 END; END; /第二步 修改声明变量 MSSQL需要在每个变量前面加 declare标示 Oracle只需要一个declare标示 此外注意修改各自的数据类型 第三步 修改游标 复杂的过程中离不开游标 因此更改游标结构经常用到 MSSQL的游标是全局的 需要建立之后再清空 而Oracle的游标类似于局部变量 使用完之后 自动清除 MSSQL游标结构如下
set @tempSQL = declare allValues_Cursor cursor for +CHAR( ) + CHAR( ) set @tempSQL = @tempSQL + select POTABLENAME POSPNAME from PM_NEPODEF_TABLE WHERE POID> and POID< 游标语句 EXEC (@tempSQL) 创建游标 OPEN allValues_Cursor 打开游标 判断是否由符合游标条件的行 如果没有则关闭和释放游标 异常返回 IF(@@CURSOR_ROWS = ) BEGIN CLOSE allValues_Cursor DEALLOCATE allValues_Cursor set @errorInfo = 没有指定表名或存储过程名! print @errorInfo return END WHILE (@@FETCH_STATUS <> ) BEGIN FETCH NEXT FROM allValues_Cursor INTO @tempPoTableName @tempPoSpName 进行数据处理 END CLOSE allValues_Cursor 关闭游标 DEALLOCATE allValues_Cursor 注销游标Oracle的游标是在变量中声明定义的 然后在过程中使用 其结构如下
声明中 Cursor allValues_Cursor is select UPPER(TRIM(POTABLENAME)) UPPER(TRIM(POSPNAME)) from PM_NEPODEF_TABLE WHERE POID> and POID< ; 声明游标 过程中 OPEN allValues_Cursor; 打开游标 WHILE allValues_Cursor%found LOOP FETCH allValues_Cursor INTO tempPoTableName tempPoSpName; 处理数据 END LOOP; CLOSE allValues_Cursor; 关闭游标 cha138/Article/program/Oracle/201311/17883相关参考
土壤中氮素的转化和土壤有机质的转化密切相关。土壤有机质的矿质化过程伴随着土壤有机态氮的无机化过程,此外,土壤氮素还存在不同无机态氮之间的相互转化过程和土壤氮与大气中氮的交换过程。 土壤中不同形态氮素
动态创建MSSQL数据库表存储过程 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 下面是利用SQ
知识大全 php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
php调用MsSQL存储过程使用内置RETVAL获取过程中的return值 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我
生态系统的能量流动是指能量通过食物网络在系统内传递和耗散的过程。生物与环境之间以传递和对流的形式相互传递与转化的能量是动能,包括热能和光能;通过食物链在生物之间传递与转化的能量是势能。生态系统的能量流
生态系统的能量流动是指能量通过食物网络在系统内传递和耗散的过程。生物与环境之间以传递和对流的形式相互传递与转化的能量是动能,包括热能和光能;通过食物链在生物之间传递与转化的能量是势能。生态系统的能量流
知识大全 JSP数据库存储过程操作JDBC-ODBC-MSSQL
JSP数据库存储过程操作JDBC-ODBC-MSSQL 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧
Oracle与Access表之间的导入和导出实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
PHP调用MsSQLServer2012存储过程获取多结果集(包含output参数)的详解 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后
《素问·阴阳应象大论》中阐述的精气阴阳之间的转化对临床有何指导意义?
原文指出:“阳为气,阴为味。味归形,形归气,气归精,精归化,精食气,形食味,化生精,气生形。该文讨论了精与气之间的生化过程及其转化关系: (1)供给形体发育成长的阴精来源于饮食五味。 (2)形体得
知识大全 rhel4+oracle10g ASM配制及ASM与文件系统之间迁移
rhel4+oracle10gASM配制及ASM与文件系统之间迁移 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一