知识大全 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 GO

   ORACLE脚本

  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 GO

  Oralce的总体结构如下 需要两个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数据库表存储过程

动态创建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表之间的导入和导出实现

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)小编为大家搜集整理后发布的内容,让我们赶快一