23.07.2011 12:00
OlegON
 
Иногда требуется посмотреть скрипт создания объекта, а инструменты вроде ToAD или PL/SQL Developer отсутствуют.
Ниже показано, как просто и доступно можно выковырнуть этот код прямо в SQL Plus.
Код:
select dbms_lob.substr((SELECT DBMS_METADATA.GET_DDL('TRIGGER','SMUSER_NOHINT') from dual),4000,1) from dual;
25.09.2011 20:59
OlegON
 
Что-то не дописал для указания схемы:
Код:
 select dbms_lob.substr((SELECT DBMS_METADATA.GET_DDL('INDEX','FFMAPREP_DOC','SUPERMAG') from dual),4000,1) from dual;
05.01.2016 12:16
OlegON
 
Обратите внимание, что для того, чтобы заspool'ить код какой-то большой процедуры (больше 4000 байт) можно воспользоваться sqlplus, установив в нем, например,
Код:
set long 200000
при этом в 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'
Часовой пояс GMT +3, время: 18:06.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.