Database 我可以通过数据库链接编译大型存储过程吗?

Database 我可以通过数据库链接编译大型存储过程吗?,database,oracle,plsql,dblink,Database,Oracle,Plsql,Dblink,我在Oracle数据库中工作,无法直接访问我们的生产数据库。我确实可以通过数据库链接间接访问。该链接与所有自定义代码运行时所使用的用户相同,并且具有与我作为该用户直接登录时相同的权限 我的问题是,有了这种访问权限,是否可以通过link/编译大型存储过程或包 我找到了函数 dbms_utility.EXEC_DDL_STATEMENT 我成功地使用它将一个过程编译到目标数据库,但是如果这个过程很大,超过32KB,我会得到一个错误 [Error] Execution (1: 1): ORA-065

我在Oracle数据库中工作,无法直接访问我们的生产数据库。我确实可以通过数据库链接间接访问。该链接与所有自定义代码运行时所使用的用户相同,并且具有与我作为该用户直接登录时相同的权限

我的问题是,有了这种访问权限,是否可以通过link/编译大型存储过程或包

我找到了函数

dbms_utility.EXEC_DDL_STATEMENT
我成功地使用它将一个过程编译到目标数据库,但是如果这个过程很大,超过32KB,我会得到一个错误

[Error] Execution (1: 1): ORA-06502: PL/SQL: numeric or value error
ORA-06512: at line 21
是否可以向目标数据库发送超过32KB的数据,并让数据库编译代码?这里是我试图实现的一个片段

declare vsql  NCLOB ;
i   NUMBER := 0;

begin

FOR rec IN (
            select * from all_source@dblink
              where owner = :schema_owner
              and name = :procedure_name
            order by  line asc
            )
    LOOP

        vsql := vsql ||  rec.text;
        --this outputs fine
        DBMS_OUTPUT.put_line ('Record ' || i || ': ' || rec.text);

    END LOOP;
--line errors with  ORA-06502
dbms_utility.EXEC_DDL_STATEMENT@dblink(vsql);

end;

你可能很幸运

由于Oracle 11g Execute Immediate可以接受CLOB数据。 只需创建一个小程序,如以下示例所示:

CREATE OR REPLACE PROCEDURE generate_from_clob( p_source IN OUT CLOB )
    AUTHID CURRENT_USER
IS
BEGIN
    EXECUTE IMMEDIATE p_source;
END;
/
由于假期的关系,我现在不能测试这个

您可能需要此链接中的信息才能通过DB链接实际传递CLOB

然而,我希望这样的事情能够奏效:

DECLARE
   l_source  CLOB := 'create or replace Package very_long is
  .
  .
  .
  end very_long;';
BEGIN
   generate_clob@remote_DB_Link( l_source );
END;
/

接受
varchar2
参数,而不是CLOB,因此错误是有意义的。但是,您的代码使它看起来像是在本地编译远程过程的源代码,而不是通过链接。如果您实际上是远程调用
dbms\u实用程序
,如果您使用的是当前的定义,那么为什么-您只是在不做任何更改的情况下重新编译?(我仍然想知道为什么;为什么你要针对生产数据库做任何特别的事情……)你是对的@AlexPoole,我在函数调用中遗漏了链接名称,但它出现在我的TOAD窗口中。尽管如此,在链接设置正确并使用varchar的情况下,有没有办法做到这一点?varchar不能容纳我所需要的那么大的字符串。您知道其他方法吗?第1行的错误ORA-06502:PL/SQL:数值或值错误:字符串缓冲区太小ORA-06512:第14行的错误ORA-06512:出于某种原因,我仍然不清楚您是否只是在用现有代码重新编译过程;或者正在尝试编译远程数据库上不存在的新代码。这个想法很有趣。您对Oracle版本有什么特殊要求吗?这看起来很有希望。今晚晚些时候我会试一试。谢谢你的意见!这是相当大的安全风险,尽管……;)