2014-02-25 25 views
1

我有一個Oracle存儲過程,它返回一個SYS_REFCURSOR。我想返回在存儲過程中聲明的自定義參數。現在,當我在我的應用程序(C#)中調用它時,它不會顯示列名稱,而是它給我命名爲:B1,:B2 ..等等。我如何實現此目的。Ref cursor沒有從StoredProcedure返回列名?

ORACLE EG:

CREATE PROCEDURE usp_MyStoredProcedure 
(
    OUTPUT_DATA OUT SYS_REFCURSOR 
) 
IS 
P_NAME VARCHAR2; 
P_AGE VARCHAR2; 
P_DOB VARCHAR2; 
BEGIN 
    SELECT NAME INTO P_NAME FROM TABLE1; 
    SELECT AGE INTO P_AGE FROM TABLE2; 
    SELECT DOB INTO P_DOB FROM TABLE3; 
OPEN OUTPUT_DATA FOR 
    SELECT P_NAME,P_AGE,P_DOB FROM DUAL; 
END; 

現在,當我執行上面的代碼我得到的列名:B1:B2:B3.我怎樣才能得到列名P_NAMEP_AGEP_DOB或其他一些alias名字呢?它可以嗎? (同樣的SELECT QUERY如果您在MSSQL創建你將得到的參數名稱作爲列名)


我已經嘗試過

SELECT P_NAME as Name,P_AGE as Age,P_DOB as DOB FROM DUAL; 

但後來也我得到同樣的老結果


當我嘗試時,ALIAS名稱的查詢並未保存。

+0

你可以把你的C#代碼來獲取? –

+0

當我在SqlNavigator中運行它時,Oracle自己給我的列名稱爲:B1,:B2等 – smilu

+0

這可能是此工具中refcursors的默認行爲。你可以試試sqlplus –

回答

1
OPEN OUTPUT_DATA FOR 
    SELECT P_NAME as name ,P_AGE as age,P_DOB as dob FROM DUAL; 

你可以通過這樣的sqlplus測試。

VARIABLE MYCUR refcursor; 
EXEC URPROC (:MYCUR); 

print MYCUR; 

如果您在查詢中選擇值而不是列名,則會錯過別名。

+0

對不起abt格式化..現在在iPhone上 –

+0

我試過了。但仍然得到:B1,:B2 .... – smilu

+0

我沒有保存它後,我把別名。可能是因爲它的列名沒有出現。 – smilu