通过存储过程连接到不同的Oracle数据库和传输表



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

Oracle 1Oracle 2

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

a) 连接Oracle 2b) 在Oracle 2中创建数据库链接以连接到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;

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

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

此外,我发现我必须用模式名称调用那些目标proc。例如schema.package.procedure@dblink(parms)。如果我在proc调用上没有架构,那么包就不会编译。

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

最新更新