आपके उदाहरण में बहुत कुछ सही नहीं है। या यों कहें:ज्यादा नहीं है ठीक आपके उदाहरण में।
CREATE OR REPLACE FUNCTION f_test(
name text = NULL
, city text = NULL
, phonenumber text = NULL
,address text = NULL
, OUT sno bigint)
RETURNS void AS
$func$
DECLARE
phonenumber AS VarChar(20); -- would collide with parameter name
BEGIN
phonenumber := phonenumber; -- nonsense
SELECT INTO sno max(ssno) + 1 FROM emp; -- SELECT INTO for assignment
IF sno IS NULL THEN
sno := ident_current('emp') + 1;
END IF;
RAISE NOTICE '%, %, %, %', name, city, phonenumber, address;
INSERT INTO emp(ename, ecity, ephonenumber, eaddress)
VALUES (name, city, phonenumber, address);
END
$func$ LANGUAGE plpgsql;
प्रमुख बिंदु
-
त्रुटि संदेश स्वयं के लिए बोलता है:
यह लगभग मैन्युअल में उस पर क्या है :
-
रिटर्न्स शून्य
combine को मिलाने का कोई मतलब नहीं होगाबाहर
. के साथ पैरामीटर। -
पैरामीटर नामों से टकराने वाले चर नामों की घोषणा न करें। यहाँ पूरी तरह से बेकार है।
-
plpgsql असाइनमेंट ऑपरेटर है
:=
, नहीं=
। -
आप आमतौर पर
RAISE
. का उपयोग नहीं करते हैं स्तरजानकारी
. आप चाहते हैंनोटिस
इसके बजाय। -
चुनें
plpgsql में लक्ष्य के बिना संभव नहीं है, आप चाहते हैंइसमें चुनें
। -
आईएफ
END IF
. के साथ समाप्त किया जाता हैEND
के साथ नहीं ।
आगे सरल करें
COALESCEका उपयोग करें कोड>
अपने IF
. को बदलने के लिए बयान। तालिका खाली होने पर भी समग्र फ़ंक्शन एक पंक्ति लौटाते हैं।
लेकिन आपको इसकी भी आवश्यकता नहीं है। बस रिटर्निंग
का उपयोग करें सीधे नई आईडी वापस करने के लिए क्लॉज:
CREATE OR REPLACE FUNCTION f_test(
name text = NULL
, city text = NULL
, phonenumber text = NULL
, address text = NULL
, OUT sno bigint)
AS
$func$
BEGIN
RAISE NOTICE '%, %, %, %', name, city, phonenumber, address;
INSERT INTO emp(ename, ecity, ephonenumber, eaddress)
VALUES (name, city, phonenumber, address)
RETURNING ssno
INTO sno; -- Assuming you want to return autoincremented id
END
$func$ LANGUAGE plpgsql;