格式改成NNN,NNN,NNN,NN0.NN
找半天,這結果真令人傷心
2009年11月22日 星期日
2009年11月19日 星期四
如何由SQL SERVER連線到ORACLE執行PACKAGE
限制條件
1、 PROCEDURE需包在PACKAGE中才能執行
2、 必須以TABLE的型態回傳值,使用型態ReturnTbl
步驟一、連線ORACLE(SQL SERVER建立)
1、建立連線伺服器
sp_addlinkedserver @server='TEST80' ,@srvproduct='Oracle',@datasrc = 'TEST80.WORLD',@provider='MSDAORA',@provstr='MSDAORA'
2、到主控台根目錄-->連線伺服器-->TEST80
3、按右鍵選內容
4、選取「安全性」頁籤,勾選「使用下列安全性條件進行連線」,輸入測試帳號/密碼步驟二、建立PACKAGE(ORACLE建立)
--BODY
CREATE OR REPLACE PACKAGE BODY CRM.WrapPack
AS
PROCEDURE WrapPackSP( ReturnVal OUT ReturnTbl)
IS
Begin
ReturnVal( 1 ) := 0;
End WrapPackSP;
End WrapPack;
/
--SPEC
CREATE OR REPLACE PACKAGE CRM.WrapPack AS
TYPE ReturnTbl IS TABLE OF NUMBER
INDEX BY BINARY_INTEGER;
PROCEDURE WrapPackSP
(
ReturnVal OUT ReturnTbl
);
END WrapPack;
/
步驟三、執行PACKAGE(SQL SERVER執行)
SELECT * FROM OPENQUERY( TEST80 ,'{Call CRM.WrapPack.WrapPackSP({resultset 1 , ReturnVal} )}')
限制條件
1、 PROCEDURE需包在PACKAGE中才能執行
2、 必須以TABLE的型態回傳值,使用型態ReturnTbl
步驟一、連線ORACLE(SQL SERVER建立)
1、建立連線伺服器
sp_addlinkedserver @server='TEST80' ,@srvproduct='Oracle',@datasrc = 'TEST80.WORLD',@provider='MSDAORA',@provstr='MSDAORA'
2、到主控台根目錄-->連線伺服器-->TEST80
3、按右鍵選內容
4、選取「安全性」頁籤,勾選「使用下列安全性條件進行連線」,輸入測試帳號/密碼步驟二、建立PACKAGE(ORACLE建立)
--BODY
CREATE OR REPLACE PACKAGE BODY CRM.WrapPack
AS
PROCEDURE WrapPackSP( ReturnVal OUT ReturnTbl)
IS
Begin
ReturnVal( 1 ) := 0;
End WrapPackSP;
End WrapPack;
/
--SPEC
CREATE OR REPLACE PACKAGE CRM.WrapPack AS
TYPE ReturnTbl IS TABLE OF NUMBER
INDEX BY BINARY_INTEGER;
PROCEDURE WrapPackSP
(
ReturnVal OUT ReturnTbl
);
END WrapPack;
/
步驟三、執行PACKAGE(SQL SERVER執行)
SELECT * FROM OPENQUERY( TEST80 ,'{Call CRM.WrapPack.WrapPackSP({resultset 1 , ReturnVal} )}')
2009年8月12日 星期三
UNION VS UNIION ALL
Example: Table 1 : First,Second,Third,Fourth,FifthTable 2 : First,Second,Fifth,Sixth
Result Set:
UNION: First,Second,Third,Fourth,Fifth,Sixth (會移除重覆值)
UNION ALL: First,First,Second,Second,Third,Fourth,Fifth,Fifth,Sixth,Sixth (不會移除重覆值)
Result Set:
UNION: First,Second,Third,Fourth,Fifth,Sixth (會移除重覆值)
UNION ALL: First,First,Second,Second,Third,Fourth,Fifth,Fifth,Sixth,Sixth (不會移除重覆值)
2009年8月4日 星期二
日期字串錯誤
當我傳入980807進PROC時,造成


原始錯誤程式
CREATE OR REPLACE PROCEDURE Proc_Media(P_REM_DATE IN CHAR)
AS
V_DATE CHAR(6) :='000000';
BEGIN
V_DATE:=P_REM_DATE;
END;
但是改成直接給值又不會錯誤
CREATE OR REPLACE PROCEDURE Proc_Media(P_REM_DATE IN CHAR)
AS
V_DATE CHAR(6) :='980806';
BEGIN
V_DATE:=P_REM_DATE;
END;
但覺得這樣實在太笨了,試用NUMBER,居然成功了,真是「小小智慧,大大學問」。
CREATE OR REPLACE PROCEDURE Proc_Media(P_REM_DATE IN NUMBER)
AS
V_DATE NUMBER;
BEGIN
V_DATE:=P_REM_DATE;
END;

原始錯誤程式
CREATE OR REPLACE PROCEDURE Proc_Media(P_REM_DATE IN CHAR)
AS
V_DATE CHAR(6) :='000000';
BEGIN
V_DATE:=P_REM_DATE;
END;
但是改成直接給值又不會錯誤
CREATE OR REPLACE PROCEDURE Proc_Media(P_REM_DATE IN CHAR)
AS
V_DATE CHAR(6) :='980806';
BEGIN
V_DATE:=P_REM_DATE;
END;
但覺得這樣實在太笨了,試用NUMBER,居然成功了,真是「小小智慧,大大學問」。
CREATE OR REPLACE PROCEDURE Proc_Media(P_REM_DATE IN NUMBER)
AS
V_DATE NUMBER;
BEGIN
V_DATE:=P_REM_DATE;
END;
訂閱:
文章 (Atom)