एक प्रक्रिया एक मूल्य वापस नहीं करती है। एक फ़ंक्शन एक मान देता है, लेकिन आपको किसी फ़ंक्शन में डीएमएल नहीं करना चाहिए (अन्यथा आप SQL कथन में फ़ंक्शन को संदर्भित करने जैसी चीजें नहीं कर सकते हैं, आप अनुमति अनुदान को भ्रमित करते हैं क्योंकि सामान्यतः डीबीए केवल-पढ़ने वाले उपयोगकर्ताओं तक पहुंच प्रदान करने में सक्षम होना चाहते हैं सभी कार्यों के लिए ताकि उपयोगकर्ता लगातार कंप्यूटेशंस कर रहे हों, आदि)।
आप स्थिति को वापस करने के लिए प्रक्रिया में एक आउट पैरामीटर जोड़ सकते हैं। यदि "सफलता" का मतलब है कि एक या अधिक पंक्तियों को अद्यतन किया गया है, तो आप पहले SQL विवरण द्वारा संशोधित पंक्तियों की संख्या की गिनती प्राप्त करने के लिए एसक्यूएल% ROWCOUNT का उपयोग करें और उपयोग कर सकते हैं वापसी पैरामीटर पॉप्युलेट करने के लिए, यानी
CREATE OR REPLACE PROCEDURE test_proc (
p_iKey IN VARCHAR2,
p_retVal OUT INTEGER
)
AS
BEGIN
DELETE FROM myTable
WHERE theKey = p_iKey;
IF(SQL%ROWCOUNT >= 1)
THEN
p_retVal := 1;
ELSE
p_retVal := 0;
END IF;
END test_proc;
बेशक, एक सामान्य कोड स्पष्टता दृष्टिकोण से, मैं आउटपुट पैरामीटर के बारे में संदिग्ध हूं जो एक स्थिति कोड वापस करने की कोशिश कर रहे हैं। आप सफलता प्राप्त करने और त्रुटि की स्थिति में अपवाद फेंक कर आम तौर पर बहुत बेहतर सेवा प्रदान करते हैं।
स्रोत
2008-11-04 16:29:55
ओआरए -14551: एक क्वेरी – Benoit
@ बेनोइट के अंदर एक डीएमएल ऑपरेशन नहीं कर सकता है जैसा कि यह होना चाहिए, फ़ंक्शन का उद्देश्य पीएल/एसक्यूएल से सादा एसक्यूएल से नहीं किया जाना है – stjohnroe