SPOOL是sql Plus指令,您不能将其混入PL / sql匿名块中。 如果要纯粹在sql Plus中 执行此操作 ,我认为一般想法是分两步进行处理,即使用第一个脚本动态地将假脱机文件名引用生成到第二个脚本中,该第二个脚本实际上进行dbms_Metadata调用。
[编辑]
This should be close to what you need - maybe a line termination problem, depending on your platform:
set pagesize 0
set linesize 300
spool wrapper.sql
select
'spool '||object_name||'.sql'||chr(10)||
'begin
dbms_Metadata.get_ddl('||chr(39)||object_type||chr(39)||','||chr(39)||object_name||chr(39)||')'||' end;'||chr(10)||
'/'||chr(10)||
'spool off'
from user_objects
where object_type = 'PROCEDURE'
;
spool off