プロが教える店舗&オフィスのセキュリティ対策術

ストアドプロシージャを出力したいと思っているのですが
オブジェクトブラウザからですと、対象のSPを選択し、スクリプト出力することで
ファイル出力できると思いますが、
sqlplusなどから、同様にファイル出力を行うことは可能でしょうか?

初歩的なご質問で恐縮ですが
ご回答頂けると大変助かります。

よろしくお願い致します。

A 回答 (1件)

> ストアドプロシージャを出力したいと思っているのですが


> オブジェクトブラウザからですと、対象のSPを選択し、スクリプト出力することで

出力と言っているのが、「ソースの出力」なのか「実行結果の出力」なのかが不明ですが、「オブジェクトブラウザのスクリプト出力」なので前者であろうと想定して回答します。

> sqlplusなどから、同様にファイル出力を行うことは可能でしょうか?

はい。可能です。

オブジェクトブラウザも内部的には、ALL_SOURCEやDBA_SOURCEなどのディクショナリからソースを取得していると思われますので、同じ事をすればよいだけです。

以下のSQLを実行して SPOOL すればテキストに保存できます。
実行時のSET文にはちょっと工夫が必要です。

SET HEAD OFF;
SET PAGES 0;
SET LINES 300;
SET TRIMS OFF;
--↑他にもあったかもしれませんが、とりあえずこんな感じで。

ACCEPT TARGET_SP_NM PROMPT ストアドプロシージャ名入力:
ACCEPT TARGET_SP_OWNER PROMPT 所有スキーマ名入力:

SPOOL &TARGET_SP_NM..sql

-- &TARGET_SP_NM
SELECT TEXT FROM ALL_SOURCE
WHERE NAME = UPPER('&TARGET_SP_NM')
AND OWNER = UPPER('&TARGET_SP_OWNER')
ORDER BY LINE;

SPOOL OFF;


「ソースの出力」ではなく「実行結果の出力」であれば、

EXECUTE SP_XXXX(&引数 ...);

などで実行できます。
(※OUTパラメータを使う場合は、無名PL/SQLブロックを使う必要があります)

SPOOL の方法は同様なので、上記を参考にしてください。
    • good
    • 2

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す