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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top