ひとりごと
ソースがDBから取得できるのって、いいんだか悪いんだか・・・。たまに構成管理に登録するの忘れるのよね。危険
準備するもの
まず、以下のスクリプトをコピーして、"sourceexport.sql"というファイルを作成します。
------------------------------------------------------------------
-- Copyright(c) 2015-2016 pakkin. All Right Reserved.
-- [改訂履歴]
-- 2015.09.15 作成
-- 2016.07.19 importバッチの出力メッセージを調整
--
-- [実行方法]
-- 1)このテキストを、"sourceexport.sql"として作成します。
-- 2)作成したフォルダ上で、コマンドプロンプトを起動し、以下のコマンドを実行します。
-- sqlplus -s user/password@servicename @sourceexport.sql
-- 3)同一フォルダ上に、"sourceimport.sql"が作成されます。ソースを反映したい場合、以下のコマンドを実行します。
-- sqlplus -s user/password@servicename @sourceimport.sql
-- 4)コンパイル結果が"sourceimport.log"として出力されます。
------------------------------------------------------------------
set escape ?
set linesize 4000
set pagesize 0
set term off
set head off
set feed off
set trim on
set trimspool on
set verify off
------------------------------------------------------------------
-- __sourceexport1.sql
------------------------------------------------------------------
spool __sourceexport1.sql
prompt spool './?&2/?&1..sql'
prompt select decode(src.LINE,1,'CREATE OR REPLACE ') || src.TEXT
prompt from USER_SOURCE src
prompt where src.NAME = '?&?&1'
prompt and src.TYPE = '?&?&2'
prompt order by src.LINE
prompt /
prompt prompt /
prompt prompt show errors
prompt spool off
spool off
------------------------------------------------------------------
-- __sourceexport2.sql
------------------------------------------------------------------
spool __sourceexport2.sql
select DISTINCT '$MKDIR ".\' || src.TYPE || '" > __sourceexport1.log 2> __sourceexport2.log
spool sourceimport.sql APPEND
prompt prompt Compiling... ./' || src.TYPE || '/' || src.NAME || '.sql
prompt $ECHO Compiling... ./' || src.TYPE || '/' || src.NAME || '.sql
prompt @"./' || src.TYPE || '/' || src.NAME || '.sql"
prompt prompt
spool off
?@__sourceexport1.sql ' || src.NAME || ' "' || src.TYPE || '"
?$SET /p X=OUTPUT:' || rpad(src.TYPE,15) || rpad(src.NAME,30) || ' ステップ数:< nul
?$TYPE ".\' || src.TYPE || '\' || src.NAME || '.sql" | FIND /C /V ""' as cmdline
from USER_SOURCE src
order by 1
/
spool off
------------------------------------------------------------------
-- sourceimport.sql
------------------------------------------------------------------
spool sourceimport.sql
prompt spool sourceimport.log
prompt set linesize 300
prompt set pagesize 0
prompt set term off
prompt set head off
prompt set feed off
prompt set trim on
prompt set trimspool on
prompt set verify off
spool off
@__sourceexport2.sql
spool sourceimport.sql APPEND
prompt spool off
prompt $echo PL/SQLソースをコンパイルしました。
prompt EXIT
spool off
$del __sourceexport*.*
$echo スクリプトを生成しました。
exit
実行(ソース取得)
スクリプトの存在するフォルダ上でコマンドプロンプトを開き、以下のコマンドを実行します。
sqlplus -s user/password@servicename @sourceexport.sql
実行時に生成されるサブフォルダ例(オブジェクトが存在する場合) |
FUNCTION |
FUNCTIONのPL/SQLソースを生成 |
PROCEDURE |
PROCEDUREのPL/SQLソースを生成 |
PACKAGE |
PACKAGEのPL/SQLソースを生成 |
PACKAGE BODY |
PACKAGE BODYのPL/SQLソースを生成 |
実行時に生成されるスクリプト |
sourceimport.sql |
生成されたPL/SQLソースを反映するコマンドを生成 |
実行(反映)
スクリプトの存在するフォルダ上でコマンドプロンプトを開き、以下のコマンドを実行します。
sqlplus -s user/password@servicename @sourceimport.sql
実行時に生成されるログ |
sourceimport.log |
反映コマンドを実行時のエラー情報を格納 |