MERGE स्टेटमेंट देखें। यह वही करना चाहिए जो आप चाहते हैं - यह WHEN NOT MATCHED
. है खंड जो ऐसा करेगा।
एक सच्चे VALUES () क्लॉज के लिए Oracle के समर्थन की कमी के साथ क्या करें, निश्चित मानों के साथ एकल रिकॉर्ड के लिए सिंटैक्स बहुत अनाड़ी है, हालांकि:
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);
एक अलग दृष्टिकोण (यदि आप एक अलग तालिका से थोक लोडिंग कर रहे हैं) ओरेकल की "त्रुटि लॉगिंग" सुविधा का उपयोग करना है। बयान इस तरह दिखेगा:
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
का उपयोग करके इंसर्ट चलाने से पहले मैन्युअल रूप से टेबल (या जो भी नाम आप चुनें) ।
विवरण के लिए मैनुअल देखें