web-dev-qa-db-fra.com

Comment dans Oracle puis-je exporter un package qui aura le package et le corps?

J'utilise PuTTY. Comment dans Oracle puis-je exporter le package et son corps vers un fichier dans le répertoire actuel à l'aide de spool?

Merci

3
catinredboots

Il y a deux façons d'y parvenir

Voie 1:

SET HEAD OFF
SET ECHO OFF
SET FEED OFF
SET TERM OFF
SET LINE 1500
SET NEWPAGE NONE
set pagesize 0
SPOOL C:\temp\FILE_NAME.SQL
Prompt CREATE OR REPLACE
select trim(text) from user_source
where name='PACKAGE_NAME' AND type='PACKAGE';
SPOOL OFF

Voie 2:

select dbms_metadata.get_ddl('PACKAGE','PACKAGE_NAME',USER) from dual;

Une autre façon suggérée par @vercelli consiste à exporter le package et son corps à l'aide de l'utilitaire Oracle expdp. Une merveilleuse méthode :)

expdp scott/tiger@db10g schemas=SCOTT INCLUDE=PACKAGE LIKE 'PACKAGE_NAME' SQLFILE=scott.sql directory=TEST_DIR dumpfile=SCOTT.dmp logfile=expdpSCOTT.log

J'espère que cela t'aides !!
Cordialement.

4

Utilisation SYS.DBMS_METADATA.GET_DDL pour obtenir un CLOB avec le code:

declare 
  myPackageSpec clob;
  myPackageBody clob;
BEGIN
    select dbms_metadata.get_ddl('PACKAGE_BODY', 'PACKAGE_NAME', 'SCHEMA') 
       into myPackageBody
      FROM DUAL;
    select dbms_metadata.get_ddl('PACKAGE_SPEC', 'PACKAGE_NAME', 'SCHEMA') 
      into myPackageSpec 
    FROM DUAL;

  dbms_output.put_line(myPackageSpec);
  dbms_output.put_line(myPackageBody);
end;

Vous pouvez également utiliser expdp depuis la ligne de commande, puis impdpwith sqlfile

expdp scott/tiger@db10g schemas=SCOTT INCLUDE=PACKAGE SQLFILE=scott.sql directory=TEST_DIR dumpfile=SCOTT.dmp logfile=expdpSCOTT.log
impdp scott/tiger@db10g SQLFILE=scott.sql directory=TEST_DIR dumpfile=SCOTT.dmp logfile=impdpSCOTT.log
3
vercelli

si vous souhaitez utiliser le spool dans sqlplus, le modèle suivant peut être utile,

set line xxx -- whatever makes sense
set pagesize 0 -- no headers
set feedback off
spool my_pkg.sql
select text from user_source where name = 'MY_PKG' order by type, line;
end spool

expdp (utilise en interne dbms_metadata), ou les approches basées sur les métadonnées fonctionneront, cependant dans l'approche fournie par expdp, vous devez

  1. exécutez expdp avec l'option INCLUDE = PACKAGE.
  2. exécutez impdp en utilisant le même fichier de vidage que vous avez créé à l'étape précédente et utilisez l'option SQLFILE = my_pkg.sql pour générer du code SQL.

Vous pouvez ensuite modifier pkg.sql selon vos besoins.

2
Raj