🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

Q&A

2回答

3222閲覧

SQLの検索結果をもとにバッチファイルの処理を変更する

fgf

総合スコア0

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

バッチファイル

バッチファイル(Batch File)は、Windowsのコマンドラインインタープリターによって複数のコマンドを実行させる事が出来るスクリプトファイルです。

0グッド

0クリップ

投稿2020/12/06 14:03

初歩的な質問で申し訳ないのですが、ご教示いただけないでしょうか。

前提・実現したいこと

Windowsのバッチファイル実行時に任意の引数(XXX)を入力する。
SQLファイルを呼び出し、入力された引数をキーに検索を実行する。
検索結果が0件ならばメッセージ「該当するものはありません」、
検索結果が1件なら「入力された値(XXX)が見つかりました、検索履歴テーブルに登録します。」と表示し、入力された引数を検索履歴テーブルに登録させたいと考えています。
また、値が入力されていない場合は、処理をせずにバッチの処理を終了させます。

発生している問題・エラーメッセージ

バッチ実行時に入力した引数をもとに、検索することはできているのですが、
検索結果の件数に応じて、処理を変更する方法がわかりませんでした。

該当のソースコード

@echo off set inputText="" set /p inputText="値を入力してください。" echo %inputText% pause rem 引数の有無を判定 if %inputText%=="" (goto nasi) else goto ari :ari sqlplus ユーザ/パスワード@DB名 @sql\search.sql %inputText% rem 検索結果件数に応じた処理 goto end :nasi echo 値が入力されていないため、処理をキャンセルしました。 pause goto end :end

SQL

1(search.sql) 2SELECT EMP_NO FROM EMP_LIST WHERE EMP_NO = '&1'; 3 4EXIT;

SQL

1(insert.sql) 2ISNERT INTO RIREKI(SEARCH_NO, SEARCH_TIME) VALUES ('&1', SYSDATE); 3 4COMMIT; 5EXIT;

環境

OS:Windows10
DB:Oracle12c

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2020/12/06 14:26

sqlplusコマンドで、検索結果の件数はどのように表示されますか?
fgf

2020/12/06 14:38

sqlplusコマンドの直後にpauseコマンドを入れて確認した限りでは、検索はできていました。
otn

2020/12/06 15:01

もしかして↑は私の質問への回答なのでしょうか?検索できたかどうかとは聞いてませんが?
guest

回答2

0

検索結果が0件ならばメッセージ「該当するものはありません」、
検索結果が1件なら「入力された値(XXX)が見つかりました、検索履歴テーブルに登録します。」と表示し、入力された引数を検索履歴テーブルに登録させたいと考えています。

見つかったら登録するという事なら、登録してから結果表示でも同じだと思いますので、

SQL

1insert into テーブル 2select3where XXX =引数(XXX)

上記のようなSQLでも良いのでは。

投稿2020/12/06 16:31

sazi

総合スコア25327

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

PL/SQLでEXITを使用して戻り値を返してください。
Windowsバッチでは%ERRORLEVEL%で取得し変数に格納してその後の処理に使用できます。

SQL

1VARIABLE V_COUNT number; 2 3DECLARE 4BEGIN 5 SELECT EMP_NO FROM EMP_LIST WHERE EMP_NO = '&1'; 6 :V_COUNT := SQL%ROWCOUNT; 7END; 8/ 9-- 呼び出し元に件数を返す 10EXIT :V_COUNT;

投稿2020/12/06 14:27

Y.H.

総合スコア7918

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問