冬の風邪予防は「鼻○○○」が新常識!?>>

いつも参考にさせていただいております。
表題のとおり、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です。よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

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;を指摘してます。
私もそれと疑いますが。
    • good
    • 0
この回答へのお礼

ありがとうございます。
まさにそれで解決しました!

お礼日時:2006/02/03 13:37

PL/SQLスクリプトの最後に、SQLPLUSを脱出するための


EXITが必要かと思います。

現状は、最初のSQLPLUSを起動して、実行後に、プロンプトを
出して止まっているんじゃないでしょうか。

スクリプトの最後に、EXITなる一行が書かれていれば、
途中でエラーにならない限り、プロンプトで止まることは
ないはずです。

エラーが出ると止まるので、それも考慮するなら、さらに、
ひと工夫必要かと思いますが。(本題からそれるので割愛します)
    • good
    • 0

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

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

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

このQ&Aを見た人が検索しているワード

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

Qbatファイルからsql文実行

クライアント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
に接続されました。

Aベストアンサー

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

参考URL:http://biz.rivus.jp/sqlplus_overview.html

Qストアド・プロシージャをバッチから起動させて実行する方法

使用DBはOracle9iです。
あるストアド・プロシージャがOracleデータベースに保存されているのですが、
これをバッチから起動させて実行するには、どのようにバッチ内容を記述すればよろしいでしょうか?

Aベストアンサー

SQL*PLUSを起動して、ストアドプロシジャを呼び出せば良いかと。

例えば、次のようなSQLスクリプト(ファイル名:SCRIPTFILE.TXT)を用意して
execute XXXX

バッチ処理では
sqlplus user/pass@dbname @SCRIPTFILE.TXT

という感じでしょうか。

Qバッチファイルを使用したsql@plusの実行及びログ出力について

バッチファイルを使用したsql@plusの実行及びログ出力について

Windows Server 2003上で動作しているOracle10gのDBに対して
Windows XP上に配置したバッチファイルをタスクで起動させ、
sql@plusを使用してデータを削除する処理を行いたいと考えています。

---data_delete.bat---
@echo %date% %time% データ削除開始 >> log.txt
sqlplus -S USER/PASS@TNSNAME @data_delete.sql >> log.txt
@echo %date% %time% データ削除終了 >> log.txt

---data_delete.sql---
DELETE FROM TABLE WHERE FLG = 1;
EXIT;

data_delete.batを実行するとlog.txtが出力されます。
---log.txt---
yyyy/mm/dd hh:nn:ss.xx データ削除開始

XXX行が削除されました。

yyyy/mm/dd hh:nn:ss.xx データ削除終了

この時、log.txtの内容を下記のように変更したいのですが、
その方法が分りません。

---log.txt---
yyyy/mm/dd hh:nn:ss.xx データ削除開始
yyyy/mm/dd hh:nn:ss.xx データ削除終了 XXX行が削除されました。

できれば[削除件数 XXX 件]と表示させたかったのですが、
自分の調べた限りではできそうにないので、
フィードバックされる文字列をそのまま使う方向で進めています。

上記ログの出力方法ができるようでしたら、
その方法を教えて頂けると嬉しいです。

宜しくお願いします。

バッチファイルを使用したsql@plusの実行及びログ出力について

Windows Server 2003上で動作しているOracle10gのDBに対して
Windows XP上に配置したバッチファイルをタスクで起動させ、
sql@plusを使用してデータを削除する処理を行いたいと考えています。

---data_delete.bat---
@echo %date% %time% データ削除開始 >> log.txt
sqlplus -S USER/PASS@TNSNAME @data_delete.sql >> log.txt
@echo %date% %time% データ削除終了 >> log.txt

---data_delete.sql---
DELETE FROM TABLE WHERE FLG = 1;
EXIT;

dat...続きを読む

Aベストアンサー

batのリダイレクト>>を使わず、SQL*Plus(@ではなく*です)のspoolを使ってはいかがでしょう?

set NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS'
sqlplus -S USER/PASS@TNSNAME @data_delete.sql

data_delete.sqlの中身
--------------------------
whenever sqlerror exit failer
set echo off
spool log.txt
select sysdate||' データ削除開始'
delete from table where flg = 1;
select sysdate||' データ削除終了'
--------------------------

ご希望のように
yyyy/mm/dd hh:nn:ss.xx データ削除開始
yyyy/mm/dd hh:nn:ss.xx データ削除終了 XXX行が削除されました。
とするためにはちょっとSQLだけではできないのでPL/SQLを使う必要があります。

batのリダイレクト>>を使わず、SQL*Plus(@ではなく*です)のspoolを使ってはいかがでしょう?

set NLS_DATE_FORMAT='YYYY/MM/DD HH24:MI:SS'
sqlplus -S USER/PASS@TNSNAME @data_delete.sql

data_delete.sqlの中身
--------------------------
whenever sqlerror exit failer
set echo off
spool log.txt
select sysdate||' データ削除開始'
delete from table where flg = 1;
select sysdate||' データ削除終了'
--------------------------

ご希望のように
yyyy/mm/dd hh:nn:ss.xx データ削除開始
yyyy/mm/...続きを読む

QPL/SQLで@ファイル名が反応しません

はじめまして、PC超初心者なのにOracleを勉強し始めました。
PL/SQLの本を買って見よう見真似でやっているのですが、SQL*PLUSから@<ファイル名>を実行しても何の反応もありません。

SQL>@sample1

としても

SQL>@sample1
SQL>

と何事もなかったようになります。

本によればエディタに保存したSQL内容が実行されるとあるのですが。。。
ちなみにサンプルエディタをダウンロードして、実行しようとしても全くの無反応です。

どこか根本的な設定がおかしいのでしょうか。。。
どなたかご回答いただけると助かります。

Aベストアンサー

sample1というファイルはどこのフォルダにありますか?
ファイル名にフォルダ名をつけたフルパスで実行してみてください。
たとえばc:\hogeというフォルダにsample1.sqlファイルがあるのであれば
SQL>@c:\hoge\sample.sql
で実行されます。

コマンドプロンプト版のsqlplusだとsqlplusを実行したフォルダにファイルがあるとフォルダ名を省略したファイル名で実行できます。
画面のsqlplusは・・・どこだったか忘れた(^^;

#なんか過去にもこんな質問があったような・・・

QOracle(オラクル)で、日付時刻型の検索方法について

質問させていただきます。
データベースはオラクルを使っていて、
SQL文で、抽出するときにエラーが出て困っています。

日付時刻型が「2005/05/26 19:13:00」という感じで入ってます。
2005/05/26 を抽出したいのですが、
BETWEEN '2005/05/26 00:00:00' AND '2005/05/26 23:59:59'

だと、エラーでできません。
どなた様か、ご教授よろしくお願いしますm(_ _)m

Aベストアンサー

日付検索を行う場合は、以下のように書式を含める必要があります。

col BETWEEN TO_DATE('2005/05/26 00:00:00','YYYY/MM/DD HH24:MI:SS') AND TO_DATE('2005/05/26 23:59:59','YYYY/MM/DD HH24:MI:SS')

ただ、厳密には

col >= TO_DATE('2005/05/26', 'YYYY/MM/DD')
AND
col < TO_DATE('2005/05/27', 'YYYY/MM/DD')

と書くべきでしょうね。

Qバッチからsqlplusの接続エラーの検知について

バッチからsqlplusの接続エラーの検知について

環境:Xp、Oracle11g

バッチからsqlpulusを起動してPL/SQLを動かしてるのですが
DB接続に失敗した時に%ERRORLEVEL%では接続エラー時には
0が戻ってきてしまいエラーを検知できませんでした。

DB接続に失敗した場合、検知する方法を模索しております。

識者の方、助言を頂ければ幸いです。

Aベストアンサー

今、環境が無くて確認できないんですが、
sqlplus -L /nolog
WHENEVER OSERROR exit 9
WHENEVER SQLERROR exit 9
connect ユーザ名/パスワード
ではどうでしょうか?特にsqlplusの-Lオプションは使えそうな感じですが。

Q3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。
外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の
書き方がわからず困っています。
ご教授いただけないでしょうか?
select * from a,b,c
where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+)
としてみましたが、うまくいきませんでした。

Aベストアンサー

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・

select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。

Qsqlplusで表示が変なので、出力を整形したい。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------

上記のように意味不明な形式で出てきます。

例えばこんな風に

select カラム1,カラム2,カラム3 from hoge;

カラム1 1の値
---------------------------
カラム2 2の値
---------------------------
カラム3 3の値

等のように分かりやすく表示できないでしょうか?

ちなみにOracle9iR2を使用しています。
sqlに関するツールは使用できないルールでして、あくまでsqlplusのコマンド上でみやすくしなければなりません。

分かりづらくですいませんが、皆さま、ご教授お願いします。

いつもお世話になっています。

サーバにアクセスしてsqlplusで、
データを調べたいのですが、
出力形式が見づらくて困っています。

よくわからいのですが、
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
---------------------------
1の値 2の値
3の値
---------------------------
カラム名1
---------------------------
カラム名2
---------------------------
カラム名3
-----------------------...続きを読む

Aベストアンサー

SQLPLUSを起動して、

SQL>set linesize 列数

でどうだ。

SQL>show linesize

で確認ができる。

QPL/SQLでログを確認したい。

以下のPL/SQLで取ってきた値をログか何かで確認したいのですが、いい方法がありますか?
想像では5行目あたりにログはきだす記述をするのかなと思うのですが、方法がわかりません。
どなたか教えてください。

--------------------------------------------
1select count(*) into vn_CNT from t_ukerui
2where no_toi = :new.no_toi
3 and no_uke = :new.no_kyaku
4 and no_gyo = 1;
5
6if ( vn_CNT > 0 ) then
7
--------------------------------------------

Aベストアンサー

参考URLをみていただければ分かりますが。
例えば、サーバのDドライブのtempフォルダにtest.txtというログファイルを出力するのであれば。
--------------------------------------------------
OUT_FILE UTL_FILE.FILE_TYPE;

BEGIN
OUT_FILE := UTL_FILE.FOPEN('d:\temp', 'test.txt','A');
EXCEPTION
WHEN OTHERS THEN
OUT_FILE := UTL_FILE.FOPEN('d:\temp', 'test.txt','W');
END;
UTL_FILE.PUT_LINE(OUT_FILE,'(vn_CNT = ' || vn_CNT || ')');
UTL_FILE.FCLOSE(OUT_FILE);
--------------------------------------------------
こんな感じでしょうか。
ログファイルがあれば追加、なければ新規で作成、件数のメッセージを一行書いて、最後にクローズしています。
これを実行すると、

(vn_CNT = 1)
(vn_CNT = 5)
(vn_CNT = 0)

のように出力されます。

参考URL:http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/sq_pl07_1.htm

参考URLをみていただければ分かりますが。
例えば、サーバのDドライブのtempフォルダにtest.txtというログファイルを出力するのであれば。
--------------------------------------------------
OUT_FILE UTL_FILE.FILE_TYPE;

BEGIN
OUT_FILE := UTL_FILE.FOPEN('d:\temp', 'test.txt','A');
EXCEPTION
WHEN OTHERS THEN
OUT_FILE := UTL_FILE.FOPEN('d:\temp', 'test.txt','W');
END;
UTL_FILE.PUT_LINE(OUT_FILE,'(vn_CNT = ' || vn_CNT || ')');
UTL_FIL...続きを読む

QSELECTで1件のみ取得するには?

こんにちわ。
いまORACLE9iを使用している者です。

ACCESSでは
SELECT TOP 1 項目名 FROM テーブル名
ORDER BY 項目名;
で並べ替えたデータ群のうち,先頭の1件だけを
取ることができますが,
ORACLEでそのような機能(SQL)はあるでしょうか?
教えてください。
よろしくお願いします。

Aベストアンサー

order by と rownum を併用する場合は注意が必要です。

[tbl01]
cola | colb
------------
1000 | aaaa
1001 | bbbb

というデータがある場合、
select cola from tbl01 where rownum < 1 order by cola desc;
とすると、「1001」ではなく、「1000」が返されます。
これは、order by の前に rownum < 1 が適用されてしまうからです。

解決するには、
select aaa from (select cola aaa from tbl01 order by cola desc) where rownum = 1;
とすれば良いです。


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

人気Q&Aランキング

おすすめ情報