2012-08-09 15 views
5

मैं एक पीएल/एसक्यूएल ब्लॉक में तालिका में एक पंक्ति डालने के लिए INSERT कथन लिख रहा हूं। यदि यह सम्मिलन विफल रहता है या कोई पंक्ति डाली नहीं जाती है तो मुझे पहले निष्पादित अद्यतन कथन को रोलबैक करने की आवश्यकता है।एसक्यूएल सम्मिलन कथन वापसी "शून्य/कोई पंक्तियां डाली गईं"

मैं जानना चाहता हूं कि INSERT कथन 0 पंक्तियों को सम्मिलित कर सकता है। यदि सम्मिलन कुछ अपवाद के कारण विफल रहता है, तो मैं इसे अपवाद ब्लॉक में संभाल सकता हूं। क्या ऐसे मामले हैं जहां INSERT सफलतापूर्वक चल सकता है लेकिन अपवाद नहीं फेंक सकता है जहां मुझे यह जांचने की आवश्यकता है कि SQL%ROWCOUNT < 1 है?

+2

क्या आपका 'INSERT' कथन एक 'INSERT ... VALUES' कथन है? या एक 'INSERT ... चयन करें'? –

+1

मेरा INSERT कथन इस प्रकार है: INSERT ... VALUES – Sekhar

उत्तर

15

का मूल्य जाँच कर सकते हैं अपने INSERT बयान एक INSERT ... VALUES के रूप में संरचित है, तो यह या तो सफलतापूर्वक एक पंक्ति को सफलतापूर्वक डालने या अपवाद उत्पन्न करेगा। SQL%ROWCOUNT की जांच करने की आवश्यकता नहीं होगी।

अपने INSERT बयान एक INSERT ... SELECT के रूप में संरचित है, तो यह संभव है कि SELECT बयान 0 पंक्तियों वापस आ जाएगी, INSERT बयान 0 पंक्तियों दर्ज हो जाएगा और कोई अपवाद नहीं फेंक दिया जाएगा। यदि आप इसे एक त्रुटि मानते हैं, तो INSERT कथन रन के बाद आपको SQL%ROWCOUNT जांचना होगा।

+0

उत्कृष्ट उत्तर! मैंने हमेशा सोचा है कि यह कैसे हो सकता है। – Gili

2

हाँ, पता लगाने के लिए कई पंक्तियों DML बयान (सम्मिलित करें, अद्यतन आदि) से प्रभावित हैं, तो आप SQL%ROWCOUNT

INSERT INTO TABLE 
SELECT col1, col2,.... 
    FROM TAB; 

if SQL%ROWCOUNT=0 then 
    RAISE_APPLICATION_ERROR(-20101, 'No records inserted'); 
end if; 
संबंधित मुद्दे