【问题标题】:Connect to different Oracle database and transfer table through Stored Procedure通过存储过程连接到不同的Oracle数据库和传输表
【发布时间】:2016-11-22 08:58:54
【问题描述】:

我在不同的服务器上有 2 个 Oracle 数据库:

甲骨文 1 甲骨文2

我想运行一个将在 Oracle 1 中执行的存储过程并执行以下操作:

a) 与 Oracle 2 连接 b) 在 Oracle 2 中创建 db 链接以与 Oracle 1 连接,或者使用现有的链接(如果已创建) c) 将表 1 从 Oracle 1 复制到 Oracle 2

我可以使用:

CREATE PUBLIC DATABASE LINK mylink
  CONNECT TO source_user IDENTIFIED BY source_password
  USING source_entry_in_tnsnames';

复制数据:

INSERT INTO mytable SELECT * FROM mytable@mylink;

我编写了一个存储过程并包含了这些,但无法连接到 Oracle 2。我们如何从存储过程连接到另一个 Oracle 数据库?

【问题讨论】:

  • 除非您使用自治事务,否则使用 mylink 连接到 Oracle 2 应该没有问题。你能分享任何错误信息吗?我认为您不需要创建第二个数据库链接 - 只需使用 mylink 传输数据即可。

标签: database oracle stored-procedures oracle11g


【解决方案1】:

这可能是一个权利问题。您在目标 Oracle DB 上的数据库链接,其中包含您要调用的过程。它必须对该包/proc具有执行权限。

另外,我发现我必须使用模式名称调用这些目标过程。比如schema.package.procedure@dblink(parms)。如果我在 proc 调用上没有架构,则该包将无法编译。

旁注...如果您通过返回了 refCursor 的链接调用过程,它将不起作用。 (至少在 Oracle 10 和 11 上)。在这种情况下,我不得不返回一张桌子。

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 2015-08-07
    • 2013-10-21
    • 2018-06-20
    • 2010-09-19
    • 1970-01-01
    • 2018-05-10
    • 2011-07-28
    • 1970-01-01
    相关资源
    最近更新 更多