国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > Oracle > 正文

Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化

2024-08-29 13:34:15
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
      這兩天寫(xiě)數(shù)據(jù)庫(kù)升級(jí)腳本,發(fā)現(xiàn)MSSQL和Oracle之間的轉(zhuǎn)化還是比較輕易的。

       以下面兩個(gè)過(guò)程為例。兩者的功能相似。

       1.MSSQL腳本  1Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖一)Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖二)/**//** 更改表名 **/
 2Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)Begin
 3Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    declare @tempPoTableName varchar(50)        --性能對(duì)象表名
 4Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    declare @tempPoSpName varchar(50)            --性能過(guò)程名
 5Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    declare @errorInfo varchar(200)             --錯(cuò)誤信息
 6Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    declare @cnt int                            --計(jì)數(shù)器
 7Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    
 8Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    declare @tempSQL    varchar(1000)
 9Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    
10Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    --定義表名、同步表名和存儲(chǔ)過(guò)程游標(biāo)
11Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    set @tempSQL = ' declare allValues_Cursor cursor for '+CHAR(13) + CHAR(10)
12Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        set @tempSQL =  @tempSQL + ' select POTABLENAME,POSPNAME from PM_NEPODEF_TABLE WHERE POID>110499 and POID<110580'
13Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    EXEC (@tempSQL)
14Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)
15Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    OPEN allValues_Cursor
16Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)
17Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    --判定是否由符合游標(biāo)條件的行,假如沒(méi)有則關(guān)閉和釋放游標(biāo),異常返回
18Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    IF(@@CURSOR_ROWS = 0 )
19Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    BEGIN
20Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        CLOSE allValues_Cursor
21Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        DEALLOCATE allValues_Cursor
22Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        set @errorInfo = '沒(méi)有指定表名或存儲(chǔ)過(guò)程名!'
23Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        PRint @errorInfo
24Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        return
25Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    END    
26Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    
27Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    print '開(kāi)始更改原有表名……'
28Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    FETCH  NEXT FROM allValues_Cursor INTO @tempPoTableName,@tempPoSpName
29Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    --根據(jù)給定的表名、存儲(chǔ)過(guò)程名 創(chuàng)建相應(yīng)的數(shù)據(jù)存儲(chǔ)存儲(chǔ)過(guò)程
30Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    WHILE  (@@FETCH_STATUS <> -1)
31Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    BEGIN
32Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        print @tempPoTableName
33Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        
34Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        IF (EXISTS (SELECT name from sysobjects WHERE name=@tempPoTableName))
35Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        BEGIN
36Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        set @tempSQL = 'ALTER TABLE '+ @tempPoTableName+' DROP constraint PK_'+@tempPoTableName
37Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        EXEC (@tempSQL)
38Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        set @tempSQL = @tempPoTableName+'_TMP'
39Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        EXEC Sp_rename @tempPoTableName,@tempSQL
40Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        END
41Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        ELSE
42Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        BEGIN
43Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        print '沒(méi)有找到表'+@tempPoTableName;
44Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        END   
45Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)
46Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        IF (EXISTS (SELECT name from sysobjects WHERE name=@tempPoSpName))
47Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        BEGIN
48Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        set @tempSQL = 'DROP PROCEDURE '+@tempPoSpName;
49Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        EXEC (@tempSQL)
50Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        END
51Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        ELSE
52Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        BEGIN
53Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        print '沒(méi)有找到過(guò)程'+@tempPoSpName;
54Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        END
55Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)
56Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    FETCH  NEXT FROM allValues_Cursor INTO @tempPoTableName,@tempPoSpName
57Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    END
58Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    CLOSE allValues_Cursor
59Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    DEALLOCATE allValues_Cursor
60Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    print '結(jié)束更改原有表名……'
61Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    print '------------------------'
62Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)END
63Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)GO

      2.ORACLE腳本 1Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)BEGIN
 2Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)DECLARE
 3Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    tempPoTableName varchar2(50);        --性能對(duì)象表名
 4Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    tempPoSpName varchar2(50);            --性能過(guò)程名
 5Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    errorInfo varchar2(200);             --錯(cuò)誤信息
 6Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    tempSQL    varchar2(1000);
 7Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    cnt1   number(1);
 8Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    cnt2   number(2);
 9Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    
10Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    --定義表名、同步表名和存儲(chǔ)過(guò)程游標(biāo)
11Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    Cursor allValues_Cursor is
12Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)         select UPPER(TRIM(POTABLENAME)),UPPER(TRIM(POSPNAME)) from PM_NEPODEF_TABLE WHERE POID>110499 and POID<110580;
13Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)             
14Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)BEGIN
15Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    OPEN allValues_Cursor;
16Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)
17Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    --判定是否由符合游標(biāo)條件的行,假如沒(méi)有則關(guān)閉和釋放游標(biāo),異常返回
18Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    
19Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    DBMS_OUTPUT.PUT_LINE('開(kāi)始更改原有表名……');
20Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    FETCH  allValues_Cursor INTO tempPoTableName,tempPoSpName;
21Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    --根據(jù)給定的表名、存儲(chǔ)過(guò)程名 創(chuàng)建相應(yīng)的數(shù)據(jù)存儲(chǔ)存儲(chǔ)過(guò)程
22Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    WHILE allValues_Cursor%found LOOP
23Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    
24Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    cnt1:=0;
25Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    cnt2:=0;
26Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    BEGIN
27Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        SELECT 1 INTO cnt1 FROM dual WHERE exists(SELECT table_name FROM user_tables WHERE table_name = tempPoTableName);
28Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        SELECT 1 INTO cnt2 FROM dual WHERE exists(SELECT OBJECT_NAME FROM user_procedures WHERE OBJECT_NAME = tempPoSpName);
29Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    exception
30Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    WHEN no_data_found  THEN
31Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        null;
32Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    END;
33Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    
34Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    IF cnt1 = 1 THEN
35Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        DBMS_OUTPUT.PUT_LINE(tempPoTableName);
36Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        tempSQL := 'ALTER TABLE 'tempPoTableName' DROP constraint PK_'tempPoTableName;
37Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        EXECUTE IMMEDIATE tempSQL;
38Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        tempSQL := 'ALTER TABLE 'tempPoTableName' RENAME TO 'tempPoTableName'_TMP';
39Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        EXECUTE IMMEDIATE tempSQL;
40Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    ELSE
41Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        DBMS_OUTPUT.PUT_LINE('沒(méi)有找到表'tempPoTableName);
42Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    END IF;
43Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    
44Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    IF cnt2 = 1 THEN
45Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        tempSQL := 'DROP PROCEDURE 'tempPoSpName;
46Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        EXECUTE IMMEDIATE tempSQL;
47Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    ELSE
48Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        DBMS_OUTPUT.PUT_LINE('沒(méi)有找到過(guò)程'tempPoSpName);
49Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    END IF;
50Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    
51Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        FETCH allValues_Cursor INTO tempPoTableName,tempPoSpName;
52Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    END LOOP;
53Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    CLOSE allValues_Cursor;
54Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    DBMS_OUTPUT.PUT_LINE('結(jié)束更改原有表名……');
55Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    DBMS_OUTPUT.PUT_LINE('------------------------');
56Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    END;
57Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)END;
58Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)/
       上面兩個(gè)是無(wú)名存儲(chǔ)過(guò)程,不需要考慮是否已經(jīng)存在該過(guò)程。對(duì)于有名的過(guò)程需要考慮對(duì)象是否已經(jīng)存在。
        我是從MSSQL向Oracle轉(zhuǎn)化的。
      第一步,修改整體結(jié)構(gòu)。
      MSSQL的總體結(jié)構(gòu)如下,只需要一個(gè)begin和end,中間加入變量聲明。
1Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)Begin
2Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    declare --變量 
3Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        --過(guò)程
4Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)END
5Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)GO      Oralce的總體結(jié)構(gòu)如下,需要兩個(gè)begin和end,一個(gè)是整個(gè)過(guò)程,一個(gè)是除去申明之外的過(guò)程。1Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)BEGIN
2Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)   DECLARE
3Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)   --變量
4Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)   BEGIN
5Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)   --過(guò)程
6Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)   END;
7Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)END;
8Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)/
        第二步,修改聲明變量。
        MSSQL需要在每個(gè)變量前面加 declare標(biāo)示,Oracle只需要一個(gè)declare標(biāo)示。此外注重修改各自的數(shù)據(jù)類型。
       
        第三步,修改游標(biāo)。復(fù)雜的過(guò)程中離不開(kāi)游標(biāo)。因此更改游標(biāo)結(jié)構(gòu)經(jīng)常用到。
        MSSQL的游標(biāo)是全局的,需要建立之后再清空。而Oracle的游標(biāo)類似于局部變量,使用完之后,自動(dòng)清除。
        MSSQL游標(biāo)結(jié)構(gòu)如下:Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    set @tempSQL = ' declare allValues_Cursor cursor for '+CHAR(13) + CHAR(10)
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        set @tempSQL =  @tempSQL + ' select POTABLENAME,POSPNAME from PM_NEPODEF_TABLE WHERE POID>110499 and POID<110580'
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        --游標(biāo)語(yǔ)句
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        EXEC (@tempSQL)
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        --1.創(chuàng)建游標(biāo)
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    OPEN allValues_Cursor
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        --2.打開(kāi)游標(biāo)        
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    --判定是否由符合游標(biāo)條件的行,假如沒(méi)有則關(guān)閉和釋放游標(biāo),異常返回
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    IF(@@CURSOR_ROWS = 0 )
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    BEGIN
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        CLOSE allValues_Cursor
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        DEALLOCATE allValues_Cursor
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        set @errorInfo = '沒(méi)有指定表名或存儲(chǔ)過(guò)程名!'
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        print @errorInfo
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        return
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    END
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    WHILE  (@@FETCH_STATUS <> -1)
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    BEGIN
       FETCH  NEXT FROM allValues_Cursor INTO @tempPoTableName,@tempPoSpName
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        --3進(jìn)行數(shù)據(jù)處理        
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    END
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    CLOSE allValues_Cursor
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        --4.關(guān)閉游標(biāo)
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    DEALLOCATE allValues_Cursor
Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        --5.注銷(xiāo)游標(biāo)    
       Oracle的游標(biāo)是在變量中聲明定義的,然后在過(guò)程中使用。其結(jié)構(gòu)如下:  1Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)--聲明中
 2Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    Cursor allValues_Cursor is
 3Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)         select UPPER(TRIM(POTABLENAME)),UPPER(TRIM(POSPNAME)) from PM_NEPODEF_TABLE WHERE POID>110499 and POID<110580;
 4Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)         --1.聲明游標(biāo)
 5Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)--過(guò)程中
 6Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    OPEN allValues_Cursor;
 7Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        --2.打開(kāi)游標(biāo)
 8Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)
 9Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    WHILE allValues_Cursor%found LOOP
10Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    FETCH allValues_Cursor INTO tempPoTableName,tempPoSpName;
11Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        --3.處理數(shù)據(jù)
12Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)
13Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    END LOOP;
14Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)    CLOSE allValues_Cursor;
15Oracle與MSSQL過(guò)程之間的轉(zhuǎn)化(圖三)        --4.關(guān)閉游標(biāo)
        第四步修改賦值語(yǔ)句和比較語(yǔ)句。MSSQL中使用Set語(yǔ)句來(lái)賦值,Oracle中使用:=來(lái)賦值。此外MSSQL中的變量習(xí)慣前面增加一個(gè)@字符,在Oracle中可以刪除。
        第五步修改邏輯結(jié)構(gòu)。MSSQL中使用IF()....ELSE....
,結(jié)構(gòu)體之間都要用BEGIN和END框起來(lái)。而Oracle則使用IF...THEN...ELSE..END IF結(jié)構(gòu),中間不必使用BEGIN和END。此外While結(jié)構(gòu)差別也類似。
        第六步修改各自的調(diào)用方法和函數(shù)。常見(jiàn)的是MSSQL的EXEC (@tempSQL),對(duì)應(yīng)Oracle的EXECUTE IMMEDIATE tempSQL。MSSQL的print函數(shù),對(duì)應(yīng)Oracle的DBMS_OUTPUT.PUT_LINE('')函數(shù)。此外還有各自使用的數(shù)據(jù)表,有所不同。例如MSSQL中所有的對(duì)象都在sysobjects表中,而Oracle中的表在user_tables中,過(guò)程在user_procedures中等。這些需要積累一些經(jīng)驗(yàn)。

         最后不要忘了檢查,Oracle的所有句子,必須要有分號(hào)表示結(jié)束。而MSSQL中不需要,即使加了也不錯(cuò)。幾步下來(lái),MSSQL過(guò)程就轉(zhuǎn)化成Oracle。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 石渠县| 民乐县| 上杭县| 榆林市| 涞源县| 马鞍山市| 盐城市| 弋阳县| 彭山县| 德清县| 抚远县| 日土县| 布拖县| 徐汇区| 宁国市| 西宁市| 石城县| 曲麻莱县| 武定县| 莆田市| 宣恩县| 榆林市| 洛南县| 札达县| 安康市| 大足县| 汾西县| 南陵县| 方正县| 兴国县| 嘉荫县| 吴堡县| 信宜市| 桑日县| 重庆市| 长汀县| 海安县| 高尔夫| 华阴市| 丰宁| 崇义县|