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

Oracle11g 如何在oracle中使用dblink调用函数?,oracle11g,database-link,Oracle11g,Database Link,是否可以在oracle中使用DBLINK调用函数?我像这样调用函数并得到错误-ORA-00904:“MC”。“GET_REFTYPES”:无效标识符 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

是否可以在oracle中使用DBLINK调用函数?我像这样调用函数并得到错误-ORA-00904:“MC”。“GET_REFTYPES”:无效标识符

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;

谢谢

函数声明为:

您将其称为unquoted,如
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:不支持远程对象类型的函数/过程参数”的函数。

是。。。但是我不知道这个函数在select语句中是如何使用的<代码>从表…函数在where、having、group by或select之外做什么?您希望这个函数返回什么?查询将如何使用它?作为限制,展示什么?另外,我看到打开(s和3关闭)sIs
mc
schema或包了吗?如果它是一个模式,那么数据库链接作为什么用户连接,如果它不是
mc
,那么该用户对该函数有权限吗?函数返回什么数据类型-您可能会点击下一步。实际上,这可能是这个问题的重复…@Alex Poole mc是一个模式,我对它和函数有完全的访问权限,我可能因为第二个问题而得到错误。函数如下所示-由于
SD\u SchoolType\u T
UDT,您将遇到该链接问题。不过,这并不能解释在到达该点之前得到的ORA-00904。@Alex我在编辑代码时出错了……名称是正确的。
select column_value
from table(mc."Get_REFTYPES"@READ_MAIN_MCNAV(param1, param2, param3)));