1.MSSQL 脚本 /** 更改表名 **/ Begin declare @tempPoTableName varchar ( 50 ) -- 性能 对" name="description" />

Oracle与MSSQL过程之间的转化(1)

发表于:2007-06-13来源:作者:点击数: 标签:
这两天写 数据库 升级脚本,发现 MS SQL 和 Oracle 之间的转化还是比较容易的。 以下面两个过程为例。两者的功能相似。 MI LY: 宋体; mso-bidi-font-family: 宋体">1.MSSQL 脚本 /** 更改表名 **/ Begin declare @tempPoTableName varchar ( 50 ) -- 性能 对

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

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

MILY: 宋体; mso-bidi-font-family: 宋体">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 '------------------------'

END
GO

2.ORACLE脚本

BEGIN

 DECLARE

    tempPoTableName varchar2(50);        --性能对象表名

    tempPoSpName varchar2(50);            --性能过程名

     errorInfo varchar2(200);             --错误信息

     tempSQL    varchar2(1000);

     cnt1   number(1);

     cnt2   number(2);

     

    --定义表名、同步表名和存储过程游标

    Cursor allValues_Cursor is

         select UPPER(TRIM(POTABLENAME)),UPPER(TRIM(POSPNAME)) from 
            PM_NEPODEF_TABLE WHERE POID>110499 and POID<110580;

    BEGIN

    OPEN allValues_Cursor;



    --判断是否由符合游标条件的行,如果没有则关闭和释放游标,异常返回

    

    DBMS_OUTPUT.PUT_LINE('开始更改原有表名……');

    FETCH  allValues_Cursor INTO tempPoTableName,tempPoSpName;

    --根据给定的表名、存储过程名 创建相应的数据存储存储过程

    WHILE allValues_Cursor%found LOOP

    

    cnt1:=0;

    cnt2:=0;

    BEGIN

        SELECT 1 INTO cnt1 FROM dual WHERE exists(SELECT table_name 
           FROM user_tables WHERE table_name = tempPoTableName);

        SELECT 1 INTO cnt2 FROM dual WHERE exists(SELECT OBJECT_NAME 
           FROM user_procedures WHERE OBJECT_NAME = tempPoSpName);

    exception

    WHEN no_data_found  THEN

        null;

    END;

    

    IF cnt1 = 1 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 cnt2 = 1 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;

/


共2页: 1 [2] 下一页

原文转自:http://www.ltesting.net