gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 20:47:41 25 4
gpt4 key购买 nike

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

我的问题是,鉴于此访问权限,是否可以通过链接/编译大型存储过程或程序包?

我找到了函数

dbms_utility.EXEC_DDL_STATEMENT

我成功地使用它来将程序编译到目标数据库,但是如果程序很大,超过 32k b,我会收到错误

[Error] Execution (1: 1): ORA-06502: PL/SQL: numeric or value error
ORA-06512: at line 21

是否可以将超过 32k b 的数据发送到目标数据库并让数据库编译代码?这是我想要实现的目标的片段

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;
/

由于假期,我现在无法测试。

您可能需要此链接 overcome 32K limit when inserting oracle clob.... 中的信息实际通过 DB-Link 传递 CLOB。

不过我希望这样的事情能起作用:

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

关于database - 我可以通过数据库链接编译大型存储过程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53767651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com