プロが教えるわが家の防犯対策術!

batファイルでSQLを実行したいのですが、エラーが出て、原因が分かりません。

batファイルの中身は、下記です。

@echo off
sqlplus -s HAN/HAN@HANBAI @C:\insert.sql


insert.sql の中身は下記のとおりです。

MERGE INTO HANG.TEST_HOJO_SHOHINM X
USING
(SELECT
A.ITM_CD,
A.ITM_NM,
C.UPRI
FROM MCJTR.MV_MAM_ITM_ALL A
LEFT JOIN MCJTR.MV_MAM_ITM_COM B
ON A.ITM_CD = B.ITM_CD
LEFT JOIN MCJTR.MV_MAM_ITM_SLS_UPRI_ALL C
ON A.ITM_CD = C.ITM_CD
) Y
ON (TRIM(X.SHO_GAIC) = TRIM(Y.ITM_CD))
-- 条件に一致する
WHEN MATCHED THEN
UPDATE SET
SHO_DEL_KBN = '',
SHO_HINSHUNM = ''
-- 条件に一致しない
WHEN NOT MATCHED THEN
INSERT
(
SHO_GAIC,
SHO_DEL_KBN,
SHO_HINSHUNM
)
VALUES
(
SUBSTRB(TRIM(Y.ITM_CD), 1, 10),
'',
''
);


OsqlEditからは実行してもエラーが出ず、
データを登録できます。

バッチファイルから実行すると、下記エラーが出ます。

SP2-0042: 不明なコマンドです("USING")。行の残りは無視されました。
SP2-0734: "WHEN MATCH..."で開始するコマンドが不明です - 残りの行は無視されました。
SP2-0734: "WHEN NOT M..."で開始するコマンドが不明です - 残りの行は無視されました。
(
*
行2でエラーが発生しました。:
ORA-00925: INTOキーワードがありません。


原因、解決方法を教えていただきたいです。

A 回答 (2件)

エディタとバッチコマンドの仕様の違いじゃないのかな。



エディタで見た目が分かりやすくするためにコマンドの引数を分けて記述しているようですが、
バッチコマンドでは行を分けたものは引数として認識されていないのだろうと推測します。
コマンドを1行にまとめてみてはいかがでしょう。

・・・

すみません。
自分、sqlplusコマンドなんて使ったことないんですわ。
そんなわけで、エラーメッセージから推測される原因を考えて回答しています。
ですので的外れな回答になっているかもしれません。
ご了承ください。
    • good
    • 1
この回答へのお礼

空白行が悪さをしていたようで、解決しました。
回答、ありがとうございました。

お礼日時:2021/03/05 17:46

@Echo OFFや-S指定を消してみては。


実行状況が分かるようにして、デバッグしたほうが良いです。
    • good
    • 0
この回答へのお礼

実行状況が分かるようにして、デバックが進みました。
ありがとうございました。

お礼日時:2021/03/05 17:47

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

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

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


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