クライアントOS:WIN2000
Oracle:9i(サーバ(UNIX)上にあります)

現在、クライアントからbatを起動し、SQL文を投げ、結果を取得したいと思っております。
(SQL文は単純にTBLをカウントしているだけです)

・batの中身
sqlplus %UID%/%PASS%@%SID% @test.sql > output

結果は取得出来るのですが、余分な情報も結果に出力されてしまいます。結果のみを出力させるにはどうすればよろしいでしょうか?

・余分な情報
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
に接続されました。

アンサープラス

近年出たOracle12cでは、マルチテナント・アーキテクチャの導入やオンラインのままでのデータファイル移動なども可能になったようです。



Oracle Database 12c | ORACLE
http://www.oracle.com/technetwork/jp/database/en …

A 回答 (2件)

sqlplus に -S オプションを追加してみればどうでしょうか。



参考URL:http://biz.rivus.jp/sqlplus_overview.html
    • good
    • 4
この回答へのお礼

問題解決しました。ありがとうございました。

お礼日時:2006/04/26 17:20

オラクルのspool機能を使用してみてはいかがでしょうか?



batの中身は
sqlplus %UID%/%PASS%@%SID% @test.sql
で結果をリダイレクトせず。

SQL文の中で
--test.sqlの中身
spool output
select * from cat;
spool off
quit

です。spool 出力先ファイル です。
spool off するまでの出力をファイル出力します。

以上、参考になればと思います。
    • good
    • 2
この回答へのお礼

こういう代替案もあるのですね。
勉強になりました。ありがとうございます。

お礼日時:2006/04/26 17:22

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

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

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

このQ&Aと関連する良く見られている質問

Q環境変数PATHをスクリプトかバッチから設定する方法

社内研修の準備のために、何台ものパソコン(Windows XPを想定)のセットアップを
行うことがありまして、
・ZIPファイルの展開
・展開後フォルダを特定の場所へ配置
・環境変数JAVA_HOMEとPATHの変更
などをバッチやJavaScriptを利用して自動的に処理させようと
しています。ZIPの展開と配置は解決できたのですが、
環境変数(pathなど)をスクリプトかバッチから設定できないでしょうか?

JavaScript(またはVBスクリプト)で次のように記述すると、
一見うまくいったように見えるのですが、レジストリが書き換わるだけで、
再起動しないとpathが有効になりませんでした。(スクリプト実行後に開いた
コマンドプロンプトで echo %path% をしても反映されていない。)

<setenvion.js>
var shell = WScript.CreateObject("WScript.shell");
shell.RegWrite("HKEY_CURRENT_USER\\Environment\\path",
"C:\\Program Files\\Java\\jdk1.6.0_06\\bin",
"REG_EXPAND_SZ");

googleで検索しても、バッチを実行するためにpathを設定しましょう、みたいな
情報しか見つからないので、質問させていただきました。
上記のスクリプトでも再起動すれば反映されるのでその点我慢すればよいのですが、
なにかよい方法をご存知の方、よろしくお願いします。

社内研修の準備のために、何台ものパソコン(Windows XPを想定)のセットアップを
行うことがありまして、
・ZIPファイルの展開
・展開後フォルダを特定の場所へ配置
・環境変数JAVA_HOMEとPATHの変更
などをバッチやJavaScriptを利用して自動的に処理させようと
しています。ZIPの展開と配置は解決できたのですが、
環境変数(pathなど)をスクリプトかバッチから設定できないでしょうか?

JavaScript(またはVBスクリプト)で次のように記述すると、
一見うまくいったように見えるのですが、レジスト...続きを読む

Aベストアンサー

スクリプトでもバッチでも

http://www.atmarkit.co.jp/fwin2k/win2ktips/460envset/envset.html
http://www.atmarkit.co.jp/fwin2k/win2ktips/1003setx/setx.html

Qoracleクライアント9.2.0.1とoracleサーバ10gで動きますでしょうか?

Windows 2003 server上でoracle10gを動かす予定です。

それに接続するためのoracleクライアントは9.2.0.1でも動くのでしょうか?

oracleの公式的には9.2.0.4以上でないと動作保障はしない、ということはわかりました。が、実際に動くかどうかを知りたいと思っています。

上記のような環境で動かしたことがある、または実際に運用しているというような事例がございましたら教えていただきたく思います。

Aベストアンサー

実際に動作します。
9.2.0.4は、9.2.0.1に対して、PSR(Patch Set Release)を当てることで、不具合対策がされたものです。

逆に、Windows32bit/64bit何れにおいても、Oracle Client 9.2.0.1ではないリリースのインストーラは無い認識です。

恐らく、OTNのドキュメントを参考されたのではと存じますが、ORACLEの一般公開文章における動作保障というのは、製品サポートという観点での記載ですため、実際に動作する、しないとは全く別口の話となります。PSR9.2.0.4がリリースされる前は、9.2.0.1でのサポートという記載となっていたはずです。

Qバッチファイルで、あるスクリプトがエラーになっても、つぎのスクリプトを実行させたい

バッチファイルで、あるスクリプトがエラーになっても、つぎのスクリプトを実行させたいと考えています。
具体的には、
■call.bat■
******************
call 1.bat
call 2.bat
******************


■1.bat■
******************
mkdir test1
******************

■2.bat■
******************
mkdir test2
******************

の3つのバッチファイルで、1.batがエラーになっても
2.batを実行させたいと考えています。
どうしたらいいのでしょうか。

よろしくお願いします。

Aベストアンサー

>1.batが終了しなくても、
>2.batを実行させたいと考えています。

なるほど。簡単そうに出来るのは
start cmd /C 1.bat
start cmd /C 2.bat
ですかね。

Q[Oracle9i]PL/SQLでFETCHしても、%FOUND=TRUEにならない

簡単なことだと思うのですが、はまってしまったので質問させてください。

以下のようなコードがあります。PL/SQLで書いてます。
SELECTした内容をFETCHして、IF文の%FOUNDで処理内容を変えているのですが、%FOUND=FALSEで必ず返ってきています。SELECT文自体でデータはひっぱって来ている(別で流しました)ようなので、理由が全然わからずまいってます。

--------------------------------------------------
FUNCTION get_siten_cd(siten_cd varchar2) RETURN varchar2 IS

ret_siten_cdvarchar(4);--4桁支店コード

/*カーソル定義*/
CURSOR cs is SELECT SITEN_CD FROM MEI1.SITEN_MST WHERE SITEN_CD3 = siten_cd;
/**カーソルに基づくレコードの定義**/
rs cs%ROWTYPE;

BEGIN

OPEN cs;

FETCH cs INTO rs;
IF cs%FOUND THEN
--データが存在する場合
ret_siten_cd := rs.SITEN_CD;
ELSE
--データが存在しない場合
ret_siten_cd := NULL;
END IF;

CLOSE cs;
RETURN ret_siten_cd;

END;
--------------------------------------------------

よろしくお願いします。

簡単なことだと思うのですが、はまってしまったので質問させてください。

以下のようなコードがあります。PL/SQLで書いてます。
SELECTした内容をFETCHして、IF文の%FOUNDで処理内容を変えているのですが、%FOUND=FALSEで必ず返ってきています。SELECT文自体でデータはひっぱって来ている(別で流しました)ようなので、理由が全然わからずまいってます。

--------------------------------------------------
FUNCTION get_siten_cd(siten_cd varchar2) RETURN varchar2 IS

ret_siten_cdvarchar(4);--...続きを読む

Aベストアンサー

列名(SITEN_CD)と引数(siten_cd)が同じ名前だからかも。

Qcmdの起動時におけるバッチスクリプトの自動実行

こんにちは。

OSは現在、64bit版のWindows7を使っています。
コマンドプトンプト(C:\Windows\System32\cmd.exe)の実行時に、
自動で実行するバッチスクリプトを設定するには、
レジストリキーの
HKEY_CURRENT_USER\Software\Microsoft\Command Processor
に、AutoRunという文字列値を作成し、そのデータに、バッチスクリプトのパスを記述します。
以前までこの方法で、
C:\Users\kei\cmdprofile.bat
というバッチスクリプトが、コマンドプロンプトの起動時に呼び出されるように設定していました。
最近、これを実行しないようにしようと思い、
HKEY_CURRENT_USER\Software\Microsoft\Command Processor
に、AutoRunという文字列値を削除しました。
ところが、依然と同じように、C:\Users\kei\cmdprofile.batが、コマンドプロンプトが起動する度に実行されてしまいます。
そこで、バッチスクリプトの名前をprofile.batに変更してコマンドプロンプトを起動させた所、
「C:\Users\kei\cmdprofile.bat は存在しない」
といったエラーメッセージが表示されました。
どうやら、C:\Users\kei\cmdprofile.batを自動実行する設定が解除されていないようなんです。
一体どうすれば、このバッチスクリプトの自動実行を解除する事ができるのでしょうか?

何か御存じの方がいらっしゃれば、是非、情報を提供して頂きたく思います。
では、よろしくお願い致します。

こんにちは。

OSは現在、64bit版のWindows7を使っています。
コマンドプトンプト(C:\Windows\System32\cmd.exe)の実行時に、
自動で実行するバッチスクリプトを設定するには、
レジストリキーの
HKEY_CURRENT_USER\Software\Microsoft\Command Processor
に、AutoRunという文字列値を作成し、そのデータに、バッチスクリプトのパスを記述します。
以前までこの方法で、
C:\Users\kei\cmdprofile.bat
というバッチスクリプトが、コマンドプロンプトの起動時に呼び出されるように設定していました。
最近、これを実...続きを読む

Aベストアンサー

ANo2です。

激動たる俺RegEdit改でも通常のRegeditでもOKですがAutRunではなく
パスの記述 C:\Users\kei\cmdprofile.bat
を検索してみてはいかがでしょうか?

QPL/SQLをWindowsのBATファイルで実行するには

いつも参考にさせていただいております。
表題のとおり、WindowsServer2003上でBATファイルを起動したいのですが、うまくいきません。

BATファイルの中身
sqlplus USER_A/USER_A @DB_A @SQLPAT
sqlplus USER_B/USER_B @DB_B @SQLPAT

SQLPATファイルは、大体以下の感じで、2つのスキーマーで同じPL/SQLを実行します。

Declare

カーソルループ
更新


END;

タスクにBATファイルを登録し実行すると
最初のPL/SQLは実行されますが、次のUSER_Bが実行されません。

どなたか詳しい方ご教授をお願いできませんでしょうか?
オラクルのVerは9iです。よろしくお願い致します。

Aベストアンサー

pl_sqlは予めDBに登録しておく。
CREATE OR REPLACE PROCEDURE pl_hoge()
IS
・・・
BEGIN
・・・
END;
/

■hoge.bat
sqlplus user/pass@dbname @hoge.sql

■hoge.sql
SET serveroutput ON;
BEGIN
pl_hoge();
END;
/
exit;

1さんはhoge.sql最後のexit;を指摘してます。
私もそれと疑いますが。

Qバッチかスクリプト

こんにちは、早速ですがある共有フォルダ内にあるフォルダやファイルを一発で消せるバッチ又はスクリプトの書き方を教えてください(もちろんアクセス権は有効である条件のもとで)。ちなみにOSはNT4.0です。

Aベストアンサー

こんにちは、honiyonです。

 ありゃ、ほんとですね(^^;

 では、rmdir を使用しましょう。

  rmdir /s [DIR名]

 とします。
 削除確認のメッセージを表示させない場合は、更に /q を付け足せばOKです。
 ヘルプは、rmdir /? で出ます。

 今度はフォルダが消えている事を確認出来ました。(Win2000の場合)

 参考になれば幸いです(..

QOracle10gサーバに接続してくるクライアント名と参照更新するテーブル名の履歴を取りたい

ユーザーに導入済みのサーバ(Windows2003Server)にOracle10gが
入っています。

仕様改定にて、複数のテーブルの項目の長さを拡張しないと
いけなくなりました。

Oracleユーザは1つしか作っておらず、
色々なシステムが同じユーザー名でログインしてきます。

複数のテーブルの項目の長さを拡張した際に、どれだけの
システムに影響を与えるか知りたく、以下を調査する方法は
ありますでしょうか?

<要件>
1.接続してくるクライアントのコンピュータ名(IPアドレスでも可)の
  履歴を取りたい
2.1のシステムがどのテーブルを参照、更新しているかの履歴を取りたい
3.1、2の履歴を数週間取りたい。
4.有料のソフトはできれば使いたくない

以上、ご教示頂きたく、よろしくお願い致します。

Aベストアンサー

>1.接続してくるクライアントのコンピュータ名(IPアドレスでも可)の履歴を取りたい

Auditで以下の項目は取れます。
USERHOST:クライアントのホスト・マシンの名前

>2.1のシステムがどのテーブルを参照、更新しているかの履歴を取りたい
テーブル単位であれば取れます。カラム単位だと発行したSQLを解析しないと難しいかも。

>3.1、2の履歴を数週間取りたい。
その期間だけAuditを使うしかないでしょう。

>4.有料のソフトはできれば使いたくない
標準のAudit(監査)を使うしかないでしょう。

監査には以下のタイプがありますが、この場合は「スキーマ・オブジェクト監査」になるでしょう。

・文監査
・権限監査
・スキーマ・オブジェクト監査
・ファイングレイン監査

ただし、監査を仕掛けるとパフォーマンスは落ちるので注意しましょう。それと10gR1から10gR2で追加された部分もあるので注意が必要です。

このあたりを参考にしてください。
http://www.insight-tec.com/mailmagazine/ora3/vol163.html

でも、監査はかなり難しいですよ。
テスト環境で十分テストしてから実施してくだい。

>1.接続してくるクライアントのコンピュータ名(IPアドレスでも可)の履歴を取りたい

Auditで以下の項目は取れます。
USERHOST:クライアントのホスト・マシンの名前

>2.1のシステムがどのテーブルを参照、更新しているかの履歴を取りたい
テーブル単位であれば取れます。カラム単位だと発行したSQLを解析しないと難しいかも。

>3.1、2の履歴を数週間取りたい。
その期間だけAuditを使うしかないでしょう。

>4.有料のソフトはできれば使いたくない
標準のAudit(監査)を使うしかないで...続きを読む

Qバッチスクリプトについて

現在OSはXPを使用しています。

iPodビデオを作る際、音量がファイル枚に不均一のため、Sound Engine Free ver.2.96bのオートマキシマイズで均一化をしてます。
ちなみに13dBに設定してます。

wavファイルの読み込みでプログラムがwavを読んで波形が出るところまでのスクリプトなら書けるのですが、
変換するファイル数が膨大にあるため、読み込みの後、オートマキシマイズで均一化、変更の保存、プログラム終了まで自動で行うバッチスクリプトが書きたいのですが、検索してもいまいち分かりませんでした。
どなたかご教授願います。
手動でやるしかないなら諦めて1ファイルずつ変換していきます…。

Aベストアンサー

ハードリンクというのは「既存のファイルに対する別名」です. つまり, 「別名」を作ることで 1つのフォルダにすべてのファイルを集めてしまい, そのフォルダに対して Foler Open などを使ってやろうという趣旨です.
以下, すべてはコマンドプロンプトで実行することになります:
[注意]
実際に実行するとファイルを破壊してしまったりするかもしれません. 特に, ハードリンクを作ったり削除したりすることになるので, 「元のファイルが変更できていない」「元のファイルごと削除してしまった」などの問題が発生する可能性は否定できません. あらかじめバックアップをとるなどして「壊れてしまっても大丈夫」という状況にしてから実行することをお勧めします.
[注意終わり]
まず,
for /r d:\ipod %f in (*.wav) do echo %f
とやると「d:\ipod 以下にあるすべての wav ファイル」が表示されるはずです.
そこで, (fsutil を実行するので管理者権限が必要かもしれません) 以下のコマンドを順次実行します:
d:
cd \
mkdir hogehoge
cd hogehoge
cmd /v:on
set i=1
for /r d:\ipod %f in (*.wav) do fsutil hardlink create "%f" !i!.wav & set /a i=!i!+1
この時点で, d:\ipod にあるすべての wav ファイルに対し, カレントフォルダ (d:\hogehoge) の中にハードリンクが作られます.
そこで, SoundEngine のスクリプトから Folder Open などを使って「カレントフォルダにあるすべての wav ファイル」をオートマキシマイズします. これで, 原理的には「d:\ipod 以下にあるすべての wav ファイルに対してオートマキシマイズした」のと同じ結果になっているはずです.
あとは
del *.wav
cd ..
rd hogehoge
exit
で証拠隠滅.
上の [注意] でも書きましたが, ここで「ファイルの削除」を行っているため最悪の場合「元のファイルをすべて消してしまった」ということになるかもしれません. 私は試していないので, 「これでいける」とまではいえません. ファイルの少なそうなフォルダをコピーしておき, そのコピーに対して同じようなことをして「ちゃんと動いている」ことを確かめてから本来の対象に対して実行することを強くお勧めします.

ハードリンクというのは「既存のファイルに対する別名」です. つまり, 「別名」を作ることで 1つのフォルダにすべてのファイルを集めてしまい, そのフォルダに対して Foler Open などを使ってやろうという趣旨です.
以下, すべてはコマンドプロンプトで実行することになります:
[注意]
実際に実行するとファイルを破壊してしまったりするかもしれません. 特に, ハードリンクを作ったり削除したりすることになるので, 「元のファイルが変更できていない」「元のファイルごと削除してしまった」などの問題が発生...続きを読む

QSQL*Plus内でPL/SQL、SQLを実行するシェルスクリプトを書

SQL*Plus内でPL/SQL、SQLを実行するシェルスクリプトを書いています。

イメージ
sqlplus scott/tiger << EOF
  declare
    aaa number;
  begin
    -- *1
    select col1 into aaa from test1;
  end;
  /

  -- *2
  define a=1
  define b=1
  @test.sql
EOF


ここで*1にて例えば複数行が返ってくるなどのエラーが
発生した場合、*2以降のSQLを実行せずにSQL*Plusから抜けたいのですが
どのようにすればよいかわかりますでしょうか。

whenever sqlerror exit 255

などはPL/SQL内の論理エラーはハンドリングしてくれないようです。

よろしくお願いします。

それかdefineや@マーク指定によるsqlファイルの取り込みを
PL/SQLの中で実行できる方法を教えていただく方法でも
当方が実施したいことはできるのでそれでもかまいません。

Aベストアンサー

SQLPLUSで投入したPL/SQL無名ブロック内でのエラーでも、「whenever sqlerror ~」で、
キャッチできますよ。少なくともWindows版SQLPUSは、そういう動作です。
発生源が、SQL文であっても、PL/SQL無名ブロックでも、ORA-nnnnnのエラーを拾わないと
「whenever sqlerror ~」の意味が無いですからね。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング