- - PR -
pl/sqlでspoolして結果をファイル出力するには
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 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-11-24 13:53
DBMS_Output.Put_Lineを使えばできると思います
|
|
投稿日時: 2005-11-24 14:05
明智様、早速のお返事ありがとうございます。
DBMS_Output.Put_Lineを調べては見たのですが、何せ初心者なので難しくてわかりませんでした。いい参考URL等、もし知っておられたら 教えていただけますでしょうか。 やはり、spoolだけでは無理ということでしょうか。 |
1