2012-10-29 51 views
5

PostgreSQL 8.4 का उपयोग करना, मैं एक समारोह लिखने के लिए कोशिश कर रहा हूँ, और यह इस तरह दिखता है:फिर भी एक और संग्रहीत प्रक्रिया सिंटैक्स त्रुटि - if-then-else

CREATE OR REPLACE FUNCTION addorupdate(smallint, varchar(7)) RETURNS void AS 
$$ 
BEGIN 
IF EXISTS (SELECT * FROM consist WHERE slave = $1) THEN 
    UPDATE consist SET 
    master = $2 
    where slave = $1; 
ELSE 
    INSERT INTO consist(slave, master) VALUES ($2, $1); 
END IF; 
END; 
$$ 
LANGUAGE SQL; 

हालांकि, यह इस तरह से विफल रहता है:

ERROR: syntax error at or near "IF" 
LINE 4: IF EXISTS (SELECT * FROM consist WHERE slave = $1) THEN 

... और मैं यह जानने के लिए बहुत अधिक समय और कैफीन बर्बाद कर रहा हूं कि मेरी मदद करने के लिए ताजा आंखों वाले किसी का उपयोग क्यों कर सकता है।

यदि यह स्पष्ट नहीं है कि मैं क्या हासिल करने की कोशिश कर रहा हूं: दास अद्वितीय मानों का एक स्तंभ है। यदि यह मौजूद है, तो इसे वर्तमान मास्टर के साथ अपडेट करें। यदि नहीं, INSERT।

अद्यतन: बदली गई भाषा plpgsql करने के लिए, और अब यह फेंकता है:

ERROR: language "plpgsql" does not exist 

अद्यतन:

CREATE LANGUAGE plpgsql; 

(: यह संकल्प :)

+2

फिर आपको 'भाषा बनाने' की आवश्यकता है। या 'पोस्ट बनाएं', जो आपके पोस्टग्रेस्क्ल संस्करण पर निर्भर है। देखें http://www.postgresql.org/docs/9.2/static/sql-createlanguage.html –

+0

क्या यह http://www.postgresql.org/docs/8.4/static/xplang-install.html सहायता करता है? –

+0

@ कॉलिनटहार्ट में मेरे पास pgplplel में pgplsql नहीं था, लेकिन इसके बजाए plpgsql (शीर्ष पर से पहला!) की कोशिश कर रहा था। मदद के लिए चीयर्स! – Jarmund

उत्तर

4

आपकी भाषाहोना चाहिएsql नहीं।

+0

pgplsql – Jarmund

+0

ओह, धन्यवाद के बजाय plpgsql के साथ काम किया !!! –