如何编译我目前在Oracle表中保存的PL/SQL源代码?(我正在从USER_SOURCE视图中复制源代码,然后我将删除这些对象,并希望从我保存的副本中恢复.)
我确信有一种简单的方法,但我只是没有输入正确的搜索条件.
试试这个:
declare
text varchar2(4000);
begin
select code into text from bkp_table;
execute immediate 'create or replace ' || text;
end;
/
Run Code Online (Sandbox Code Playgroud)
好的,如果所有代码行都存储在单行中,则此方法有效.如果要执行存储在多行中的代码,您应该执行以下操作:
declare
text varchar2(32767);
begin
select listagg(text, ' ') within group (order by line) into text from all_source where name = 'MYPROC';
execute immediate 'create or replace ' || text;
end;
/
Run Code Online (Sandbox Code Playgroud)
当32767个字符太少时问题就开始了.在这种情况下,这可能是一个解决方案:
declare
text clob;
begin
for x in (select text from all_source where name = 'LONGTEST') loop
text := text || x.text;
end loop;
execute immediate 'create or replace ' || text;
end;
/
Run Code Online (Sandbox Code Playgroud)
此外,也请一看是为什么它是一个有点奇怪的东西.
编辑
建议改为dbms_lob,在这种情况下clob需要初始化:
declare
text clob := ' ';
begin
for x in (select text from all_source where name = 'LONGTEST') loop
dbms_lob.append(text, x.text);
end loop;
execute immediate 'create or replace ' || text;
end;
/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
104 次 |
| 最近记录: |