PostgreSQL ने PG11 तक संग्रहीत कार्यविधियों का समर्थन नहीं किया। इससे पहले, आप एक फ़ंक्शन का उपयोग करके एक ही परिणाम प्राप्त कर सकते थे। उदाहरण के लिए:
CREATE FUNCTION MyInsert(_sno integer, _eid integer, _sd date, _ed date, _sid integer, _status boolean)
RETURNS void AS
$BODY$
BEGIN
INSERT INTO app_for_leave(sno, eid, sd, ed, sid, status)
VALUES(_sno, _eid, _sd, _ed, _sid, _status);
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;
फिर आप इसे इस तरह कह सकते हैं:
select * from MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );
Pg के संग्रहीत कार्यों की मुख्य सीमाएँ - वास्तविक संग्रहीत कार्यविधियों की तुलना में - हैं:
- एकाधिक परिणाम सेट वापस करने में असमर्थता
- स्वायत्त लेन-देन के लिए कोई समर्थन नहीं है (एक फ़ंक्शन के भीतर BEGIN, COMMIT और ROLLBACK)
- एसक्यूएल-मानक कॉल सिंटैक्स के लिए कोई समर्थन नहीं है, हालांकि ओडीबीसी और जेडीबीसी ड्राइवर आपके लिए कॉल का अनुवाद करेंगे।
उदाहरण
PG11 से शुरू होकर, CREATE PROCEDURE
सिंटैक्स पेश किया गया है जो लेनदेन के लिए समर्थन प्रदान करता है।
CREATE PROCEDURE MyInsert(_sno integer, _eid integer, _sd date, _ed date, _sid integer, _status boolean)
LANGUAGE SQL
AS $BODY$
INSERT INTO app_for_leave(sno, eid, sd, ed, sid, status)
VALUES(_sno, _eid, _sd, _ed, _sid, _status);
$BODY$;
जिसके साथ बुलाया जा सकता है:
CALL MyInsert(1,101,'2013-04-04','2013-04-04',2,'f' );