web-dev-qa-db-ja.com

Oracleで、パッケージとボディを持つパッケージをどのようにエクスポートできますか?

PuTTYを使用しています。スプールを使用して、Oracleでパッケージとその本体を現在のディレクトリのファイルにエクスポートするにはどうすればよいですか?

ありがとう

3
catinredboots

これを達成するには2つの方法があります

方法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

方法2:

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

@vercelliが提案する別の方法は、Oracle expdpユーティリティを使用してパッケージとその本体をエクスポートすることです。素晴らしい方法:)

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

お役に立てれば !!
よろしく。

使用する - SYS.DBMS_METADATA.GET_DDL コードでCLOBを取得するには:

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;

コマンドラインからexpdpを使用し、次に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

sqlplusでスプールを使用する場合は、次のテンプレートが役立ちます。

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(内部ではdbms_metadataを使用)、またはメタデータベースのアプローチが機能しますが、expdpが提供するアプローチでは、

  1. iNCLUDE = PACKAGEオプションを指定してexpdpを実行します。
  2. 前の手順で作成したのと同じダンプファイルを使用してimpdpを実行し、SQLFILE = my_pkg.sqlオプションを使用してSQLコードを生成します。

その後、必要に応じてpkg.sqlを編集できます。

2
Raj