如何在oracle中使用dblink调用函数?

How to call function using dblink in oracle?

是否可以在oracle中使用DBLINK调用函数?我像这样调用函数并收到错误 - ORA-00904: "MC"."GET_REFTYPES": invalid identifier

select column_value from table(mc.Get_REFTYPES@READ_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;

谢谢!

函数声明为a quoted identifier:

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

您将其称为未加引号的 mc.Get_REFTYPES@READ_MAIN_MCNAV(...)。引用标识符引起的烦恼之一是你总是必须用引号引用它们并且与原始定义完全相同,所以你需要做:

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

您不需要引用 mc,因为带引号的大写标识符的行为与不带引号的一样。

但是,即使进行了更正,这也不会如您所愿。正如所讨论的那样 in this answer 你不能调用 returns 用户定义类型的函数,比如 RefType_T,并且会得到 "ORA-30626: function/procedure parameters of remote object types are not supported".