PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

त्रुटि:एक के बाद एक डिफ़ॉल्ट मान के साथ इनपुट पैरामीटर भी पोस्टग्रेज़ में डिफ़ॉल्ट होना चाहिए

आपके उदाहरण में बहुत कुछ सही नहीं है। या यों कहें:ज्यादा नहीं है ठीक आपके उदाहरण में।

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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मेरे एयरफ्लो कार्य कतारबद्ध क्यों हैं लेकिन नहीं चल रहे हैं?

  2. JDBC का उपयोग करके डेटाबेस को पोस्टग्रेज करने के लिए (Py) स्पार्क कैसे कनेक्ट करें

  3. एकाधिक बाएं जुड़ने वाली SQL डुप्लिकेट पंक्तियाँ

  4. PostgreSQL (9.1) साधारण समानता के लिए अनुक्रमणिका का उपयोग क्यों नहीं कर रहा है?

  5. PostgreSQL:पूर्ण पाठ खोज - आंशिक शब्दों की खोज कैसे करें?