- PR -

pl/sqlでspoolして結果をファイル出力するには

1
投稿者投稿内容
やすけ
ベテラン
会議室デビュー日: 2003/08/20
投稿数: 87
投稿日時: 2005-11-24 13:34
pl/sql初心者です。
SunOS 5.6、Oracle8.0.4.0.0で
シェルを起動し、そのシェルからpl/sqlを実行して
ANALYZEしたテーブルの処理結果をspoolで定義したファイルに書き出しています。
抽出した結果が複数件ある場合、loopで処理をデータがなくなるまで回してその内容をspoolで定義したファイルに書き込みたいのですが、それは可能なのでしょうか?
実際に以下にコーディングを書きます。
そもそもspool内でカーソルを発行できるのでしょうか?
PROMPT ============================================================================
PROMPT Oracleのスキーマ情報の一覧を取得します。
PROMPT 情報を取得するユーザID、ユーザIDパスワードを入力し、Enterをクリックしてください。
PROMPT 格納ディレクトリは「/export/home/nkdse/wk_xxxxx/」に格納されます。
PROMPT ファイル名は「ora_info_xxxxx.log」です。
PROMPT xxxxxはユーザIDです。
PROMPT 確認をしてください。
PROMPT ============================================================================
ACCEPT USERID CHAR PROMPT 'ユーザID:'
ACCEPT USERIDPASS CHAR PROMPT 'ユーザIDパスワード:'

PROMPT
PAUSE 続行するにはEnterキーを押してください。
connect &USERID/&USERIDPASS

--======================================================================
-- カーソルの宣言
--======================================================================
-- user_tablesよりテーブル名、テーブルスペース名取得のカーソルの宣言
CURSOR cUser_Tables IS
SELECT
TABLE_NAME AS テーブル名,
TABLESPACE_NAME AS テーブルスペース名
FROM USER_TABLES;

-- user_tablesカーソル格納用
rUser_Tables cUser_Tables%ROWTYPE;

BEGIN

/* ANALYZE(分析) */
OPEN cUser_Tables;
LOOP
FETCH cUser_Tables INTO rUser_Tables;
EXIT WHEN cUser_Tables%NOTFOUND;
TBL_SpaceName = rUser_Tables.テーブルスペース名;
ANALYZE TABLE rUser_Tables.テーブル名 ESTIMATE STATISTICS SAMPLE 10 PERCENT;
END LOOP;
CLOSE cUser_Tables;


SPOOL &1&USERID/ora_info_&USERID..log
PROMPT &USERID/&USERIDPASS
PROMPT &1&USERID/ora_info_&USERID..log

SELECT TABLE_NAME AS テーブル名,
NUM_ROWS AS データ件数
FROM USER_TABLES
WHERE TABLESPACE_NAME = TBL_SpaceName
ORDER BY TABLE_NAME;

SPOOL OFF


EXIT

ほぼpl/sql初心者なので、手探りの状態で作っていますので
どなたか、ご教授ください。よろしくお願いします。

明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 2005-11-24 13:53
DBMS_Output.Put_Lineを使えばできると思います
やすけ
ベテラン
会議室デビュー日: 2003/08/20
投稿数: 87
投稿日時: 2005-11-24 14:05
明智様、早速のお返事ありがとうございます。
DBMS_Output.Put_Lineを調べては見たのですが、何せ初心者なので難しくてわかりませんでした。いい参考URL等、もし知っておられたら
教えていただけますでしょうか。
やはり、spoolだけでは無理ということでしょうか。
1

スキルアップ/キャリアアップ(JOB@IT)