作業ノート

様々なまとめ、雑感など

sqlplusを使ってpackageのソースを取得する

packageを更新するときに、バックアップ作業で必要になったので。

-- backup.sql
spool foo_package.sql

column TEXT FORMAT a4000
set linesize 4000

set pagesize 0
set head off
set feed off

select text from user_source
where name = 'FOO' and type = 'PACKAGE'
order by line;

spool off
quit

上記のようなSQLファイルを作成し、以下の方法で実行する。

$ sqlplus scott/tiger @backup.sql
  • textは、varchar2(4000)なので、一行で出力するようcolumnを指定する。
  • pagesizeを0にすると、カラム名などが全く表示されなくなる。
  • nameはパッケージ名、プロシージャ名、ファンクション名などを指定する。
  • typeは対象の種類。'PACKAGE', 'PACKAGE BODY', 'FUNCTION', 'PROCEDURE'など
  • 行数を昇順でソート。

あとは、foo_package.sqlの各行の末尾にある空白を削除する。