私は Oracle 11g とこのフォーラムの初心者です。私のSQL開発者は他の方法をとらないため、Oracle Mergeステートメントを使用して単純な更新ステートメントを実行するだけです。
奇妙なことに、どのようにステートメントを修正しようとしても、このフォーラムの多くのエントリを読んだ後でも、まったく同じエラー メッセージが表示されるのです。
SQL Developer でステートメントを実行する方法に応じて、2 つの異なるエラー メッセージがあります。ステートメントをストア プロシージャとして実行すると (更新ステートメントはストア プロシージャ内の小さな部分です。他の SQL ステートメントをコメント アウトし、この更新ステートメントをストアド プロシージャ内に残しました)、次のエラーが発生しました。
私はこれを実行しました:
create or replace
PROCEDURE ADDR_UPDATE_2
AS
/* other sql statements are commented out */
MERGE INTO (SELECT id,xseq,line_1,line_2,zip,tax FROM ADDR ) b
USING (SELECT id,xseq,line_1, line_2,NVL(zip, '') AS pos_10 , NVL(tax, '') AS pos_11
FROM TEMP_ADDR ) v
ON(b.id = v.id
AND b.xseq = v.xseq)
WHEN MATCHED THEN UPDATE SET b.line_1 = v.line_1,
b.line_2 = v.line_2,
b.zip = v.pos_10,
b.tax = v.pos_11
WHERE b.line_1 <> v.line_1
OR b.line_2 <> v.line_2
OR b.zip <> v.pos_10;
/* other sql statements are commented out */
END;
そして、私はこのエラーを受け取りました:
エラー (23,9): PLS-00103: 次のいずれかを予期しているときに、シンボル "INTO" が検出されました: 定数 例外 テーブル long double ref char 時間 タイムスタンプ 間隔 日付 バイナリ 各国文字 nchar
(私はどこでもゴーグルしましたが、答えは見つかりませんでした)
23行目は「INTO」という単語を参照しています
- しかし、str の一部としてではなく、上記の Merge ステートメントを単独で実行した場合。プロシージャ、エラーは発生しません。結果が得られました: 0 行がマージされました。
ここで、Merge ステートメントを次のように変更しました。
create or replace
PROCEDURE ADDR_UPDATE_2
AS
/* other sql statements are commented out */
MERGE INTO ADDR b
USING (SELECT id,xseq, line_1, line_2, NVL(zip, '') AS pos_10,
NVL(tax, '') AS pos_11
FROM TEMP_ADDR) v
ON(b.id = v.id
AND b.xseq = v.xseq
AND b.line_1 <> v.line_1
OR b.line_2 <> v.line_2
OR b.zip <> v.pos_10)
WHEN MATCHED THEN UPDATE SET b.line_1 = v.line_1,
b.line_2 = v.line_2,
b.zip = v.pos_10,
b.tax = v.pos_11;
/*
other sql statements are commented out
*/
END;
同じエラーが発生しました:
エラー (23,9): PLS-00103: 次のいずれかを予期しているときに、シンボル "INTO" が検出されました: 定数 例外 テーブル long double ref char 時間 タイムスタンプ 間隔 日付 バイナリ 各国文字 nchar
23行目は「INTO」という単語を参照しています
str の一部としてではなくステートメントを実行したとき。プロセス:
別のエラーが発生しました:
コマンド ラインのエラー:9 列:8
エラー レポート: SQL エラー: ORA-38104: ON 句で参照されている列を更新できません: "B"."LINE_2" 38104. 00000 - "ON 句で参照されている列を更新できません: %s" *原因: UPDATE SETのLHSに、ON句で参照されている列が含まれています *処置:
2 日前から答えを探してみましたが、結果が得られませんでした。この問題を解決する方法を教えてくれる人はいますか?