2016-03-08 21 views
0

是否有可能在oracle中使用DBLINK調用函數?我打電話這樣的功能,並收到錯誤 - ORA-00904: 「MC」 「GET_REFTYPES」:無效的標識符如何在oracle中使用dblink調用函數?

select column_value from table([email protected]_MAIN_MCNAV(param1, param2, param3))); 

功能代碼

CREATE OR REPLACE FUNCTION "MC"."Get_REFTYPES"(
    param1 IN VARCHAR, 
    param2 IN NUMBER, 
    param3 IN DATE DEFAULT SYSDATE 
) 
    RETURN RefType_T PIPELINED IS 

    CURSOR cur_st (
    cur_param1 VARCHAR, 
    cur_param2 NUMBER, 
    cur_param3 DATE 
    ) IS 
      select 
       TypeID 
      FROM ...... 
      WHERE......... ; 

    t_st Types_T; -- Table variable to store return values  

BEGIN 

    OPEN cur_st(param1, param2 , param3); 
    FETCH cur_st BULK COLLECT INTO t_st; 
    CLOSE cur_st; 

    FOR i IN 1..t_st.COUNT LOOP 
      PIPE ROW(t_st(i)); 
    END LOOP; 
    RETURN; 
END; 

謝謝!

+0

是的......但我不明白在這個select語句中如何使用這個函數。 「從桌子上......」在哪裏做的功能是什麼,有,按組還是選擇?你期望這個函數返回什麼結果,查詢如何使用它?作爲限制,展示什麼?另外,我看到打開('s和3關閉)' – xQbert

+0

'mc'是模式還是包?如果它是一個模式,數據庫鏈接連接的用戶是什麼,如果不是'mc',那麼這個用戶是否擁有該功能的權限?函數返回什麼數據類型 - 接下來可能會遇到[此問題](http://stackoverflow.com/a/7246141/266304)。實際上,這可能是這個問題的重複... –

+0

@Alex Poole mc是一個模式,我確實可以完全訪問它和函數,因爲第二個問題我可能會得到錯誤。該函數看起來像這樣 - – Kaur

回答

2

該函數聲明與a quoted identifier

CREATE OR REPLACE FUNCTION "MC"."Get_REFTYPES"(

你說它不帶引號的,因爲[email protected]_MAIN_MCNAV(...)。其中,所列刺激標識符引起的是,你總是要參考他們的報價和完全相同的情況下,原來的定義,所以你需要做的:

select column_value 
from table(mc."Get_REFTYPES"@READ_MAIN_MCNAV(param1, param2, param3))); 

你不需要引用mc,因爲無論如何,帶引號的大寫標識符都表現得像一個沒有引號的標識符。

但是,即使這樣糾正,這也不會做你想要的。正如所討論的in this answer你不能調用一個函數,返回一個用戶定義的類型,如RefType_T,並將得到「ORA-30626:不支持遠程對象類型的函數/過程參數」。