2009-04-02 7 views
3

Je souhaite exporter par programme mes procédures/fonctions et packages dans des fichiers individuels (en tant que sauvegarde) et en utilisant Oracle 9.2.ORACLE - Exportation de procédures/packages vers un fichier

La solution la plus proche que j'ai trouvée était en utilisant DBMS_METADATA.GET_DDL, mais comment puis-je sortir le CLOB dans un fichier texte, sans perdre aucune partie (en raison de la longueur ou l'indentation)?

Ou peut-être avez-vous d'autres solutions pour sauvegarder des paquets ou d'autres fonctions individuellement (seulement celle que je veux, pas toutes)?

Merci

Répondre

3

Essayer d'obtenir CLOBS (et LONGS) à partir d'utilitaires de ligne de commande comme SQL * Plus semble toujours me donner des problèmes de formatage/troncature. Ma solution consistait à écrire un utilitaire simple dans un langage de contrôle de non-type (Perl) qui utilise DBMS_METADATA pour ramener le CLOB dans une chaîne.

Snippet:

...

$sthRef = $dbhRef->prepare("select dbms_metadata.get_ddl(?,?) from dual"); 

$sthRef->execute('PACKAGE', $thisName); 

while (($thisDDL) = $sthRef->fetchrow()) { 

    print $thisDDL; 

} 

$sthRef->finish; 

...

1

Si vous voulez obtenir le LDD, il n'y a vraiment aucun moyen, sauf DBMS_METADATA comme vous avez déjà dit.

Habituellement, ce type de sauvegarde est fait avec exp (ou expdp), bien que cela ne crée pas un fichier SQL comme vous le feriez avec la plupart des autres systèmes de SGBD.

1
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 
0

Merci va pour RAS, invité pour sa réponse, je avais besoin pour obtenir les codes pour certaines procédures seulement , donc j'ai essayé le code, pour trouver que ce code tronque le code après le nom de la procédure dans la première ligne du code et le remplacer par trois points '...'

donc je changé le code à ce qui suit:

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; 

et cette page export procedures & triggers ont un code très 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; 

dernière façon de le faire à l'aide du navigateur Toad schéma, puis sélectionnez toutes les procédures nécessaires et cliquez avec le bouton droit de la souris puis sélectionnez exporter dans le menu.

Questions connexes