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

          都市淘沙者

          荔枝FM Everyone can be host

          統計

          留言簿(23)

          積分與排名

          優秀學習網站

          友情連接

          閱讀排行榜

          評論排行榜

          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 和導入數據三部分。

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

          原來的數據庫名稱 xihang_info 現在是方案 sa 中的表空間。

          移植后注意事項:

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

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

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

          修改存儲過程:

          1. 修改臨時表

          SQL 的臨時表用 # ## 開頭,使用完后自動釋放, ORACLE 的臨時表則存在數據庫中,每個會話的數據都互不干涉。 語法分別為: 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 判斷是否還有數據, ORACLE 的游標用 %FOUND %NOTFOUND 來判斷游標是否結束。

          4. 連接字符串:

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

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

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

          6. 日期類型數據要注意

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

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

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

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

          For index in cusor_name loop

          變量名: =cursor_name%rowcount;

          End loop;

          Fetch into 語句的話, rowcount=1

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

          解決的方法是通過 substr ()函數。例如獲取‘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 了。編譯通過只能說明在語法上沒有問題了,要進一步執行看邏輯上是否還有問題。在編譯時產生的錯誤是 pl/sql 錯誤,在執行時的錯誤是 ora 錯誤。

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

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

          Sql var rc1 refcursor;

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

          Sql print rc1

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

          主站蜘蛛池模板: 贵德县| 麻城市| 永福县| 英山县| 襄汾县| 宣恩县| 新乐市| 紫云| 张家界市| 报价| 化州市| 大同市| 明溪县| 阳曲县| 广汉市| 马山县| 石首市| 江油市| 通山县| 乐陵市| 天台县| 赤城县| 嘉定区| 唐山市| 阳曲县| 潜江市| 清流县| 通渭县| 普定县| 寿宁县| 石嘴山市| 黎城县| 浪卡子县| 金山区| 邻水| 仁布县| 南昌县| 云浮市| 民丰县| 台东县| 孝感市|