マージ コマンドを使用して、存在しないレコードをテーブルに挿入しています。単純な挿入コマンドを使用すると、正常に機能します。マージ システムを使用すると、常に警告 ORA-00904: "T"."GROUP_COMPANY_ID" 無効な識別子が表示されます。ON 条件を (1=1) に変更して強制的に true にすると、マージ コマンドは正常に機能します。
元のマージステートメントが間違っているのは何ですか? 二重引用符で囲まれた名前なしでテーブルが作成されたと確信しているため、ここでは大文字と小文字の問題はありません。
create table test
(
create_date DATE not null,
group_company_id CHAR(16) not null
)
-- This is okay
INSERT INTO test (create_date, group_company_id) VALUES (TO_DATE('20100531', 'YYYYMMDD'), 'abc');
-- This one will raise ORA-00904 error
MERGE INTO test T
USING (SELECT 'abc' AS group_company_id FROM DUAL) C
ON (T.group_company_id = C.group_company_id)
-- ON (1 = 1)
WHEN NOT MATCHED THEN
INSERT (create_date, group_company_id)
VALUES (TO_DATE('20100531', 'YYYYMMDD'), 'abc')
WHEN MATCHED THEN
UPDATE SET group_company_id = 'abc';