0

私のMERGE INTOステートメントは、SQLDeveloperを使用してSQLで機能します。

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

ただし、PHPで試行すると機能しません。

$update_or_insert_list = oci_parse($conn,
                                   "MERGE INTO EMAIL_LIST d USING (SELECT :email EMAIL FROM DUAL) s ON (d.EMAIL = s.EMAIL) WHEN NOT MATCHED THEN INSERT (EMAIL) VALUES (s.EMAIL);"
); // Also tried with ':email' and/or with ; inside the SQL statement

oci_bind_by_name($update_or_insert_list, ':email', $email);

oci_execute($update_or_insert_list);

表は次のとおりです。

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

-- And yes, this is a test-case!

PHPでMERGEINTOを機能させるにはどうすればよいですか?

4

1 に答える 1

3

これはエラーではありません。クエリMERGEの末尾を削除してください。;

最後のセミコロンはSQLの一部ではありません。これは、SQLステートメントの終了を示すためにさまざまなクライアントインターフェイス(SQL * Plus、SQL Developer ...)で使用されます。PHPでは、各リクエストは単一のSQLステートメントであるため、セミコロンは必要ありません。

于 2012-11-07T09:12:45.950 に答える