日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

oracle数据转成sqlserver,oracle数据库转换到Sqlserver的几点经验

發布時間:2024/7/19 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oracle数据转成sqlserver,oracle数据库转换到Sqlserver的几点经验 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

應廣大朋友的要求,本人將《PB-ORACLE通用開發框架2.1》版本的程序

成功轉換到SQLServer下,下面是我總結的幾條經驗,與大家分享,有不

1.數據類型的轉換? 建立兩個數據源basedb, basdb_sql

為每個表,建立一個數據管道,修改部分字段類型

Oracle????????????????????????????? SQLServer

varchar2??????????????????????????? varchar

blob??????????????????????????????? image

2.函數的轉換

ORACLE?????????????????????????????? SQLServer

to_char(readingdate,’yyyymm’)????? convert(char(6),readingdate,111)

to_char(readingdate,’yyyy/mm’)???? convert(char(7),readingdate,112)

decode( ,? ,? ,? ,)????????????????? case when then end 或者 isnull(x,0)

左右連接 (+)???????????????????????? left outer join

nvl(field1,'')?????????????????????? isnull(field1,'')

舉例子如下:

oracle:

SELECT EFMFID,

EFMMID,

EFMNAME,

EFMMETHOD,

EFMUPPICT,

EFMDNPICT,

EFMCHECK,

EFMVISIBLE,

EFMHINT,

EFMMICOHELP,

EFMTBITEMINDEX,

EFMTBITEMORDER,

EFMTBITEMSPACE,

DECODE(ORFMRID,NULL,'N','Y')? FLAG

FROM ERPFUNCMETHOD,

(SELECT ORFMRID,ORFMFID,ORFMETHOD

FROM OPERRFMETHOD WHERE ORFMRID=:v_role)

WHERE EFMFID=ORFMFID(+) AND EFMMID=ORFMETHOD(+) AND EFMFID=:v_func

ORDER BY EFMTBITEMORDER

-----------------------------------

sqlserver:

SELECT?? A.EFMFID,

A.EFMMID,

A.EFMNAME,

A.EFMMETHOD,

A.EFMUPPICT,

A.EFMDNPICT,

A.EFMCHECK,

A.EFMVISIBLE,

A.EFMHINT,

A.EFMMICOHELP,

A.EFMTBITEMINDEX,

A.EFMTBITEMORDER,

A.EFMTBITEMSPACE,

case IsNUll(B.ORFMRID,'*')

when '*' then 'N'

else 'Y'

end FLAG

FROM ERPFUNCMETHOD AS A

LEFT OUTER JOIN

(SELECT ORFMRID,ORFMFID,ORFMETHOD

FROM OPERRFMETHOD WHERE ORFMRID = :v_role ) AS B

ON A.EFMFID=B.ORFMFID AND A.EFMMID=B.ORFMETHOD

WHERE A.EFMFID = :v_func

ORDER BY A.EFMTBITEMORDER;

3. 數據窗口中的語法

在測試的過程會發現有一些數據窗口在 SqlServer不能用:修改方法是將字段的引號去掉

4. 取服務器時間

ORACEL

-------------------------------------------

datetime ld_today

declare cur cursor for select getdate();

open cur;

fetch cur into :ld_today;

close cur;

IF SQLCA.SQLCODE <> 0 THEN

MESSAGEBOX('錯誤信息', SQLCA.SQLERRTEXT)

END IF

return ld_today

SQLSERVER:

---------------------------------------------

date ld_today

SELECT SYSDATE INTO :Ld_TODAY FROM DUAL;

IF SQLCA.SQLCODE <> 0 THEN

MESSAGEBOX('錯誤信息', SQLCA.SQLERRTEXT)

END IF

return ld_today

5.函數的轉換

盡量不要使用select count(*),而由EXISTS 來代替

ORACEL

-------------------------------------------

CREATE OR REPLACE FUNCTION fChkRoleFunc

(Vrole IN VARCHAR2,vcode IN VARCHAR2)

Return Integer

AS

lpcode Integer;

BEGIN

SELECT COUNT(*) INTO lpcode FROM operrolefunc

WHERE orfrid=vrole AND orffid = vcode;

Return lpcode;

EXCEPTION WHEN OTHERS THEN

lpcode := 0;

Return lpcode;

END;

SQLSERVER:

---------------------------------------------

CREATE? FUNCTION fChkRoleFunc

(@Vrole? VARCHAR(2), @vcode? VARCHAR(10))

Returns Int

AS

BEGIN

DECLARE?? @lpcode Int

IF EXISTS(? SELECT *? FROM operrolefunc WHERE orfrid=@vrole? AND orffid = @vcode)

set @lpcode = 1

else

set? @lpcode = 0

RETURN (@lpcode)

END

6. 取本機IP

在ORACLE中是利用系統對象獲得

//登錄數據庫客戶端名稱

SELECT sys_context('USERENV','HOST')

INTO :gs_workstation

FROM dual;

gs_workstation=mid(gs_workstation,pos(gs_workstation,'/')+1,len(gs_workstation) - pos(gs_workstation,'/'))

//登錄數據庫客戶端IPSELECT sys_context('USERENV','IP_ADDRESS') INTO :gs_ws_ip FROM dual;在SQLServer版本是用winsock.pbl和pslib5.dll 完成的增加了一個函數f_ip_sock

總結

以上是生活随笔為你收集整理的oracle数据转成sqlserver,oracle数据库转换到Sqlserver的几点经验的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。