ORACLE - Esportazione Procedure / pacchetti a un file
Domanda
Vorrei esportare a livello di codice i miei Procedure / Funzioni e pacchetti in singoli file (come backup) e l'utilizzo di Oracle 9.2.
La soluzione più vicina che ho trovato era utilizzando DBMS_METADATA.GET_DDL, ma come posso riprodurre il CLOB un file di testo, senza perdere alcuna parte (a causa di lunghezza o indentazione)?
O forse avete altre soluzioni a pacchetti di backup o altre funzioni singolarmente (solo quello che voglio, non tutti)?
Grazie
Soluzione
Cercando di ottenere CLOB (e LONGS) da utility a riga di comando come SQL * Plus sembra sempre di darmi la formattazione / problemi di troncamento. La mia soluzione era quella di scrivere un semplice programma di utilità in un linguaggio di controllo non tipo (Perl) che utilizza DBMS_METADATA
per portare il CLOB in una stringa.
Snippet:
...
$sthRef = $dbhRef->prepare("select dbms_metadata.get_ddl(?,?) from dual");
$sthRef->execute('PACKAGE', $thisName);
while (($thisDDL) = $sthRef->fetchrow()) {
print $thisDDL;
}
$sthRef->finish;
...
Altri suggerimenti
Se si desidera ottenere il DDL, non c'è davvero nessun modo tranne DBMS_METADATA
come hai già detto.
Di solito, questo tipo di backup è fatto con exp
(o expdp
), anche se questo non crea un file SQL come si otterrebbe con la maggior parte dei sistemi DBMS.
SET pages 0
spool proclist.sql
SELECT
CASE line
WHEN 1 THEN
'CREATE OR REPLACE ' || TYPE || ' ' || NAME || CHR(10) || text
ELSE
text
END
FROM user_source
WHERE TYPE IN ( 'PROCEDURE','FUNCTION')
ORDER BY name, line;
spool OFF
exit
Grazie va per RAS, ospite per la sua risposta, Avevo bisogno di codici per solo alcune procedure, così ho provato il codice, di trovare che questo codice troncare il codice dopo nome della procedura in prima linea del codice e sostituirlo con tre punti '...'
così ho cambiato il codice al seguente:
SELECT CASE line
WHEN 1 THEN 'CREATE OR REPLACE ' -- || TYPE || ' ' || NAME || --CHR(10) || ' ('
|| text
ELSE
text
END
FROM user_source
WHERE TYPE IN ( 'PROCEDURE') and name like 'SomeThing%'
ORDER BY name, line;
e questa pagina procedure di esportazione e trigger avere un codice molto usefaul:
connect fred/flintstone;
spool procedures_punch.lst
select
dbms_metadata.GET_DDL('PROCEDURE',u.object_name)
from
user_objects u
where
object_type = 'PROCEDURE';
spool off;
ultimo modo per farlo utilizzando Rospo Schema Browser, quindi selezionare tutte le procedure necessarie e tasto destro del mouse e selezionare Esporta dal menu.