आप RAISE
. पर कॉल नहीं कर सकते गतिशील रूप से (EXECUTE
. के साथ) ) PL/pgSQL में - जो केवल SQL कथनों के लिए काम करता है, और RAISE
एक PL/pgSQL कमांड है।
इसके बजाय इस सरल कार्य का प्रयोग करें:
CREATE OR REPLACE FUNCTION f_raise(text)
RETURNS void
LANGUAGE plpgsql AS
$func$
BEGIN
RAISE EXCEPTION '%', $1;
END
$func$;
कॉल करें:
SELECT f_raise('My message is empty!');
संबंधित:
टिप्पणी का अतिरिक्त जवाब
CREATE OR REPLACE FUNCTION f_raise1(VARIADIC text[])
RETURNS void
LANGUAGE plpgsql AS
$func$
BEGIN
RAISE EXCEPTION 'Reading % % %!', $1[1], $1[2], $1[3];
END
$func$;
कॉल करें:
SELECT f_raise1('the','manual','educates');
-
VARIADIC
एक डेटा प्रकार नहीं है, बल्कि एक तर्क मोड है। । -
तत्वों को किसी अन्य सरणी तत्व की तरह संभाला जाना चाहिए।
-
एक
RAISE
. में एकाधिक चर का उपयोग करने के लिए स्टेटमेंट, कई%
डालें संदेश पाठ में।
उपरोक्त उदाहरण विफल हो जाएगा यदि कोई $3
. नहीं है पारित कर दिया गया है। आपको इनपुट तत्वों की परिवर्तनीय संख्या से एक स्ट्रिंग को इकट्ठा करना होगा। उदाहरण:
CREATE OR REPLACE FUNCTION f_raise2(VARIADIC _arr text[])
RETURNS void
LANGUAGE plpgsql AS
$func$
DECLARE
_msg text := array_to_string(_arr, ' and '); -- simple string construction
BEGIN
RAISE EXCEPTION 'Reading %!', _msg;
END
$func$;
कॉल करें:
SELECT f_raise2('the','manual','educates');
मुझे संदेह है कि आपको VARIADIC
की आवश्यकता है इसके लिए पैरामीटर बिल्कुल। मैनुअल यहां पढ़ें .
इसके बजाय, सभी पैरामीटर परिभाषित करें, शायद डिफ़ॉल्ट जोड़ें:
CREATE OR REPLACE FUNCTION f_raise3(_param1 text = ''
, _param2 text = ''
, _param3 text = 'educates')
RETURNS void
LANGUAGE plpgsql AS
$func$
BEGIN
RAISE EXCEPTION 'Reading % % %!', $1, $2, $3;
END
$func$;
कॉल करें:
SELECT f_raise3('the','manual','educates');
या:
SELECT f_raise3(); -- defaults kick in