Dict.CN 在線詞典, 英語學習, 在線翻譯

          都市淘沙者

          荔枝FM Everyone can be host

          統(tǒng)計

          留言簿(23)

          積分與排名

          優(yōu)秀學習網(wǎng)站

          友情連接

          閱讀排行榜

          評論排行榜

          sql server 2000移植到orcle的心得體會(轉)

          移植過程:采用的 oracle 的移植工具 Migration WorkBenth

          移植注意事項:

          1. 移植前要在 ODBC 中建立 DSN ,由于移植的是 sql server 2000 ,驅動選 sql server

          2. oracle 實例中建立登陸用戶,包括用戶名和密碼,并賦予權限( connect resource dba )。這在使用 WorkBenth 過程中是要填寫的內容。

          3. 移植過程分為獲取 sql server Model ,建立 oracle Model 和導入數(shù)據(jù)三部分。

          4. 移植后我們會發(fā)現(xiàn)在 oracle 實例中有兩個方案生成: omwb_emulation sa 。其中 omwb_emulation 可以不予理會,它主要提供了弱游標,供 sa 方案中的存儲過程調用。對于方案 sa 我們會注意到幾點:原來 sql server 中的數(shù)據(jù),包括表,視圖,存儲過程,索引等都在這個方案中存放;原來 sql server 表中的種子類型數(shù)據(jù)在方案 sa 中被統(tǒng)一管理,放在“序列”中;

          原來的數(shù)據(jù)庫名稱 xihang_info 現(xiàn)在是方案 sa 中的表空間。

          移植后注意事項:

          1. 因為應用程序使用的是 ODBC, 涉及到幾個連接字符 : dsn username password 。由于應用程序中的連接字符串是 conn.Open("sczb","sczb","sczbpw") ,而現(xiàn)有的 schema sa ,連接失敗。現(xiàn)在有兩種方案:改連接字符串或從新建立一個方案 sczb 。這里我們采用了第二種方案,新建方案 sczb

          方法是:先新建用戶 sczb, 密碼是 sczbpw, 權限是 connect resource dba ;然后將方案 sa 導入到方案 sczb 中(若是導入到另外機器上,方案 omwb_emulation 一并導出再導入)。

          2. sczb 中修改視圖和存儲過程。修改視圖只要把 sql 語句中的方案名 sa 刪除或改為即可。存儲過程需要修改的內容比較多,具體見下:

          修改存儲過程:

          1. 修改臨時表

          SQL 的臨時表用 # ## 開頭,使用完后自動釋放, ORACLE 的臨時表則存在數(shù)據(jù)庫中,每個會話的數(shù)據(jù)都互不干涉。 語法分別為: CREATE TABLE #TEMP ID INT NAME VARCHAR 20 )) CREATE GLOBAL TEMPORARY TABLE TEMP ID INT NAME VARCHAR 20 ))

          2. IDENTITY 字段

          Oracle 不支持自增長類型,在向表中插入含有 IDENTITY 字段的記錄時,要顯示聲明。例如:

          Insert into tbl values (序列名 .nextval, 字段 1 ,字段 2 ,。。。)。

          3. SQL ORACLE 的游標
          SQL
          的游標用 @@FETCH_STATUS 判斷是否還有數(shù)據(jù), ORACLE 的游標用 %FOUND %NOTFOUND 來判斷游標是否結束。

          4. 連接字符串:

          SQL 的字符串連接用 + 號, ORACLE 字符串連接用 || ,單引號可以做轉義符。因為在 sql server

          number 類型的“ + ”運算也用到 ”+”, 因此在移植后 oracle 對于 number 類型的“ + ”有時識別不出來,而作為字符連接來處理。

          5. 游標的名稱在移植后會有重復。不允許。

          6. 日期類型數(shù)據(jù)要注意

          其格式不同于 sql server 中的“ yyyy-mm-dd ”格式,而是“ dd-x -yyyy “格式。要用 to_char(?,’yyyy-mm-dd’) 處理成 sql server 一樣的格式。

          7. oracle 獲取 sql 語句所影響的行數(shù)時,不像 sql server @@rowcount 直接獲取那么簡單,要分以下三種情況。

          Oracle 中對于隱性游標,獲取行數(shù)的方法是通過 SQL%rowcount 直接獲得。

          對于顯性游標獲取行數(shù)通過 cursor_name%rowcount 獲得,但有有以下 sql 語句:

          For index in cusor_name loop

          變量名: =cursor_name%rowcount;

          End loop;

          Fetch into 語句的話, rowcount=1

          8. 獲得年,月,日在 oracle 中不支持 year (), month ()和 day ()函數(shù)。

          解決的方法是通過 substr ()函數(shù)。例如獲取‘2000-01-10’的‘年’,可以通過substr(‘2000-01-10’,14)得到。

          9. oracle 不支持 case 語句。

          sql server 中語句:

          CASE WHEN (GROUPING(BM_Name2) = 1)THEN ' 合計 ' ELSE ISNULL(BM_Name2,' 未知 ') END AS BM_Name2,

          oracle 改寫為 decode 語句:

          decode(GROUPING(BM_Name2),1,' 合計 ',nvl(BM_Name2,' 未知 ')) BM_Name2

          10. 左右連接問題。

          sql server 的連接語句如:

          select a.id b.yueshj from jh_wh_xiangmu as a left join jh_lr_zongliang as b on a.id=b.xiangmid

          oracle 中應改為:

          Select a.id, b.yueshj from jh_wh_xiangmu a, jh_lr_zongliang b where a.id=b.xiangmid(+);

          sql server 的連接語句如:

          select a.id b.yueshj from jh_wh_xiangmu as a left join jh_lr_zongliang as b on trim(a.id)=trim(b.xiangmid)

          oracle 中應改為:

          Select a.id, b.yueshj from jh_wh_xiangmu a, jh_lr_zongliang b where trim(a.id)=trim(b.xiangmid(+))

          11 .改好的存儲過程,不能編譯通過就認為 ok 了。編譯通過只能說明在語法上沒有問題了,要進一步執(zhí)行看邏輯上是否還有問題。在編譯時產生的錯誤是 pl/sql 錯誤,在執(zhí)行時的錯誤是 ora 錯誤。

          12. sql/plus worksheet 中執(zhí)行存儲過程的語句是: execute 存儲過程名(‘參數(shù) 1 ‘,’參數(shù) 2 ‘,。。)

          但在執(zhí)行返回多條記錄集的存儲過程,也就是參數(shù)中含有 RC1 IN OUT Omwb_emulation.globalPkg.RCT1 的存儲過程時,執(zhí)行起來略有不同。在 sql plus 中執(zhí)行的語法如下:

          Sql var rc1 refcursor;

          Sql execute pro_name(‘ 參數(shù) 1 ‘,’參數(shù) 2 ‘,: rc1 ,。。 )

          Sql print rc1

          posted on 2007-01-25 11:40 都市淘沙者 閱讀(1463) 評論(0)  編輯  收藏 所屬分類: Oracle/Mysql/Postgres/

          主站蜘蛛池模板: 仁化县| 襄汾县| 丹东市| 进贤县| 固安县| 永登县| 双鸭山市| 仁怀市| 东阳市| 潞西市| 泽普县| 静安区| 朔州市| 利津县| 呼玛县| 土默特右旗| 勃利县| 运城市| 秦皇岛市| 昌平区| 固原市| 洪雅县| 肥西县| 专栏| 怀柔区| 金堂县| 新蔡县| 休宁县| 井研县| 青河县| 海宁市| 邵阳县| 河东区| 纳雍县| 墨玉县| 瑞安市| 泰兴市| 河源市| 东兴市| 吴旗县| 富平县|