1

以下の UPDATE_OR_INSERT コードの何が問題になっていますか?

MERGE INTO EMAIL_LIST d USING (SELECT 'foo@gmail.com' EMAIL) s
    ON (d.EMAIL = s.EMAIL)
        WHEN MATCHED THEN
            UPDATE SET d.EMAIL = s.EMAIL
        WHEN NOT MATCHED THEN
            INSERT (EMAIL) VALUES (s.EMAIL);

テーブルを考えると:

CREATE TABLE EMAIL_LIST ( 
    EMAIL VARCHAR2 (100)  NOT NULL
);
ALTER TABLE EMAIL_LIST
    ADD CONSTRAINT PK_EMAIL_LIST PRIMARY KEY ( EMAIL ) ;

エラー

エラーレポート:

SQL エラー: ORA-00923: FROM キーワードが予期された場所に見つかりませんでした 00923. 00000 - "FROM キーワードが予期された場所に見つかりませんでした"

4

1 に答える 1

4

いくつかのこと。

Oracleの場合はDUALなど、何かから定数を選択する必要があります。

MERGE INTO EMAIL_LIST d 
USING 
    (SELECT 'foo@gmail.com' EMAIL FROM DUAL) s
ON (d.EMAIL = s.EMAIL)
WHEN MATCHED THEN
    UPDATE SET d.EMAIL = s.EMAIL
WHEN NOT MATCHED THEN
    INSERT (EMAIL) VALUES (s.EMAIL);

また、d.EMAILで照合すると同時に更新することはできません。あなたのライン;

WHEN MATCHED THEN
    UPDATE SET d.EMAIL = s.EMAIL

d.EMAILはすでにs.EMAILと等しいか、一致が発生しないため、とにかく実際には意味がありません。を削除するWHEN MATCHEDと、作業が完了します。

MERGE INTO EMAIL_LIST d 
USING 
    (SELECT 'foo@gmail.com' EMAIL FROM DUAL) s
ON (d.EMAIL = s.EMAIL)
WHEN NOT MATCHED THEN
    INSERT (EMAIL) VALUES (s.EMAIL);
于 2012-09-26T08:31:25.377 に答える