Обратите внимание, что для того, чтобы заspool'ить код какой-то большой процедуры (больше 4000 байт) можно воспользоваться sqlplus, установив в нем, например,
при этом в dbms_lob оборачивать не надо.
Приведу пример вытаскивания большей части программного кода скриптом
Код:
#!/bin/bash
sqlplus -S / as sysdba <<EOF
SET LINESIZE 1200
SET PAGESIZE 0
SET FEEDBACK OFF
SET ECHO OFF
SET VERIFY OFF
SET PAUSE OFF
SET TRIMSPOOL ON
set heading off
spool /temp/test/proclist
select name, decode(type,'PACKAGE','PACKAGE_SPEC',
'PACKAGE BODY', 'PACKAGE_BODY',
'TYPE BODY', 'TYPE_BODY',
type
) type from dba_source where text like '%wrapped%' and owner='SUPERMAG' and type!='PACKAGE' order by name;
spool off
exit
EOF
cat /temp/test/proclist.lst | while read i
do
obj=`echo $i|cut -f1 -d' '`
typ=`echo $i|cut -f2 -d' '`
echo $typ - $obj
sqlplus -S / as sysdba <<EOF
SET LINESIZE 1200
SET PAGESIZE 0
SET FEEDBACK OFF
SET ECHO OFF
SET VERIFY OFF
SET PAUSE OFF
SET TRIMSPOOL ON
set heading off
set longchunksize 200000 long 200000 pages 0
spool /temp/test/$obj.plb
SELECT DBMS_METADATA.GET_DDL('$typ','$obj','SUPERMAG') from dual;
spool off
exit
EOF
unwrap /temp/test/$obj.plb /temp/test/$obj.sql.txt
rm /temp/test/$obj.plb
done
rm /temp/test/proclist.lst
как видно, для объектов необходимо декодировать, например, 'PACKAGE BODY' в 'PACKAGE_BODY'