MERGEステートメントを確認してください。これはあなたが望むことをするはずです-それはWHEN NOT MATCHED
これを行う句。
ただし、Oracleが真のVALUES()句をサポートしていないため、固定値を持つ単一レコードの構文はかなり不器用です。
MERGE INTO your_table yt
USING (
SELECT 42 as the_pk_value,
'some_value' as some_column
FROM dual
) t on (yt.pk = t.the_pke_value)
WHEN NOT MATCHED THEN
INSERT (pk, the_column)
VALUES (t.the_pk_value, t.some_column);
別のアプローチ(たとえば、別のテーブルから一括読み込みを行う場合)は、Oracleの「エラーロギング」機能を使用することです。ステートメントは次のようになります:
INSERT INTO your_table (col1, col2, col3)
SELECT c1, c2, c3
FROM staging_table
LOG ERRORS INTO errlog ('some comment') REJECT LIMIT UNLIMITED;
その後、エラーをスローしたはずのすべての行がテーブルerrlog
で利用可能になります 。そのerrlog
を作成する必要があります DBMS_ERRLOG.CREATE_ERROR_LOG
を使用して挿入を実行する前に、テーブル(または選択した名前)を手動で実行します 。
詳細はマニュアルをご覧ください