- PR -

bat(バッチ)からのSQLPLUS実行、およびファイル出力について

投稿者投稿内容
yasu
会議室デビュー日: 2007/07/24
投稿数: 4
投稿日時: 2007-07-24 10:55
現在コマンドプロンプトよりbatファイルからSQLPLUSを実行して、
その結果をファイルに出力する方法を模索しています。

bat内で以下のような処理をしてみました。
--------------------------------------------------------------
echo set linesize 4000 > aaa.sql
echo set heading off >> aaa.sql
echo set echo off >> aaa.sql
echo set feedback off >> aaa.sql
echo SELECT CONCAT(CONCAT(OWNER,' '),CONCAT(CONCAT(REPLACE(object_type, ' ', '_'), ' '), object_name)) >> aaa.sql
echo FROM sys.all_objects >> aaa.sql
echo WHERE object_name LIKE '%VIEW%' >> aaa.sql
echo ORDER BY owner,object_type, object_name; >> aaa.sql
echo exit >> aaa.sql

sqlplus -s user/pass@sid @aaa.sql > bbb.list
-----------------------------------------------------------------
私の思惑としては
STEP.1 echoによって、aaa.sqlに実行するSQLを出力。
STEP.2 SQLPLUSをサイレントモードで起動。aaa.sqlを実行し、結果をbbb.listに出力。
の流れを想定していたのですが、
このbatを実行すると、
aaa.sqlは正常に作成され、SQLも書き込まれているのですが、
bbb.listは作成されているものの、SQLの実行結果が書き込まれていません。
(ゼロByteのbbb.listが作成されてしまいます)

aaa.sqlに吐き出されたSQL文自体には問題なく、
単純にローカルで実行すれば、結果が返ってきます。
なにが原因で書き込みに失敗しているのか不明で頭を抱えています。
どなたかご教授をおねがいできませんでしょうか。

なお、DBはOracle 10gです。

[ メッセージ編集済み 編集者: yasu 編集日時 2007-07-24 10:58 ]
もしもし
ぬし
会議室デビュー日: 2004/10/15
投稿数: 280
投稿日時: 2007-07-24 11:36
echo の羅列の中に echo spool bbb.list >> aaa.sql を追加してみてはいかがでしょう。
で、コマンドラインの > bbb.list は外す方向で。

_________________
もしもし@RMAN 友の会

[ メッセージ編集済み 編集者: もしもし 編集日時 2007-07-24 11:38 ]
未記入
会議室デビュー日: 2007/07/12
投稿数: 18
投稿日時: 2007-07-24 11:43
commandlineのuser名、password、TNS名のいずれかが間違っている可能性は
ありませんか?
あと、空白が足りないとか。
yasu
会議室デビュー日: 2007/07/24
投稿数: 4
投稿日時: 2007-07-24 12:26
>もしもしさん

アドバイス、誠にありがとうございます。
説明足らずでしたが、
SPOOLを使用した吐き出し方法は既に確認済みで、
ご説明頂いている方法で実装できることは分かっております。

しかしながら今回の課題は
sqlplus -s user/pass@sid @aaa.sql > bbb.list
の記述でなぜ結果が書き出されないのかということになっております。

最悪の場合、ご指南頂いた方法に辿り着くことになるかとは考えております。

>未記入さん
アドバイス、誠にありがとうございます。
コマンドラインからの入力に関しましても確認済みなので
おそらくはご指摘いただいた問題は発生していないと思われます。
(サイレントモードをオフ、およびexitをなしにしてSQLPLUSが起動し、
結果が返る事を確認しました)


[ メッセージ編集済み 編集者: yasu 編集日時 2007-07-24 12:27 ]
ゆうじゅん
ぬし
会議室デビュー日: 2004/01/16
投稿数: 347
投稿日時: 2007-07-24 12:52
sqlplus -s user/pass@sid @aaa.sql > bbb.list

sqlplus -s user/pass@sid @aaa.sql 2> bbb.list

上記のように変更して実行した場合、bbb.listに何か出力されますか?
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2007-07-24 12:55
同じようなバッチファイルをWindowsXP上で試して動作しましたよ。
接続しているSIDなりユーザなりが、テストした対象と異なって
いるため、SELECT文の条件でヒットするレコードが存在しないと
かではないでしょうか。
gaf777
会議室デビュー日: 2003/08/20
投稿数: 19
お住まい・勤務地: 大阪
投稿日時: 2007-07-24 12:56
こんにちは。

 コマンドラインからSQLPLUSを起動した場合、
新しいコマンドプロンプトが起動したりしませんか?
 10gはならなかったと思うのですが・・・
 8iならsqlplusコマンドだと新しいプロンプトが起動されてしまうので、
%ORACLE_HOME%\binにあるplus80コマンドでsqlplusを起動していました。

以上です、ご参考までに。
yasu
会議室デビュー日: 2007/07/24
投稿数: 4
投稿日時: 2007-07-24 13:01
>ゆうじんさん

アドバイス、誠にありがとうございます。
ご教授頂いた形で実行してみましたが、
bbb.listにはなにも出力されていませんでした(ゼロByteのbbb.listのみ)

これは、コマンドオプションかなにかによるものでしょうか。。。

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