【问题标题】:Calling a Function Using DB Link in Oracle在 Oracle 中使用 DB Link 调用函数
【发布时间】:2019-01-20 07:30:24
【问题描述】:

我的源数据库中存在一个函数(需要 2 个参数),我正在尝试使用数据库链接从另一个数据库调用它。我正在使用以下代码,但我不断收到错误消息:

SELECT SCHEMA.FUNC_NAME@DBLINK(PARAM1, PARAM2) FROM SCHEMA.TABLE_NAME@DBLINK; 

这是我得到的错误:

ORA-00904: "SCHEMA"."FUNC_NAME": invalid identifier

【问题讨论】:

  • 可能db链接连接的用户看不到该功能。
  • 调用函数时是否需要指定特定的表?为什么不只是SCHEMA.FUNC_NAME@DBLINK(PARAM1, PARAM2) FROM dual;?
  • 即使使用dual,我也遇到了同样的错误
  • @samg - 它抱怨的是函数而不是表格,所以使用 dual 无济于事。作为数据库链接定义的一部分,您连接的用户需要对schema.func_name(在远程数据库中)具有执行权限。
  • @BarryPiccinni - 这取决于函数是否由数据库链接连接到的同一用户拥有。在这种情况下,由于指定了模式并出现错误,因此它们看起来是不同的。这是有效的,只要正确的 privs 到位。 (并且该函数可能正在从远程表中传递值,这可以解释包括那个而不是双重的。但现在有点抽象。)

标签: sql oracle function plsql dblink


【解决方案1】:

我将重命名您的数据库引用以尝试回答您的问题。 我将使用 localDB 和 remoteDB 作为数据库名称。 您在 remoteDB 上创建了一个函数。 您应该在 localDB 上创建 DBlink。在 DBLink 定义中,您有所有者、db_link、用户名、主机和创建日期。 在 remoteDB 上,您需要为您的 dblink 中指定的用户名提供选择和执行权限。 然后,您应该能够使用一些语法从 localDB 执行函数,例如 EXEC SQL CALL schema.func_name@dblink(parm1, parms);

【讨论】:

    猜你喜欢
    • 2021-11-19
    • 2021-12-22
    • 2011-10-27
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    相关资源
    最近更新 更多