2

是否可以在 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;

谢谢!

4

1 回答 1

6

该函数使用带引号的标识符声明:

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,因为带引号的大写标识符的行为与未加引号的标识符一样。

但是,即使进行了纠正,这也不会满足您的要求。正如本答案中所讨论的,您不能调用返回用户定义类型的函数,例如RefType_T,并且会得到“ORA-30626:不支持远程对象类型的函数/过程参数”。

于 2016-03-08T19:44:50.657 回答