2013-07-09 14 views
13
CREATE TABLE app_for_leave 
(
    sno integer NOT NULL, 
    eid integer, 
    ename varchar(20), 
    sd date, 
    ed date, 
    sid integer, 
    status boolean DEFAULT false, 
    CONSTRAINT pk_snoa PRIMARY KEY (sno) 
); 

बेसिक निवेशन है ::PostgreSQL में संग्रहित प्रक्रियाओं का उपयोग कर तालिका में डेटा सम्मिलित करने के लिए कैसे

INSERT INTO app_for_leave(sno, eid, sd, ed, sid, status) 
VALUES(1,101,'2013-04-04','2013-04-04',2,'f'); 

...

INSERT INTO app_for_leave(sno, eid, sd, ed, sid, status) VALUES (?, ?, ?, ?, ?, ?); 

मेरे आवश्यकता :: एक तालिका में डेटा सम्मिलित करने के लिए कैसे संग्रहीत प्रक्रियाओं का उपयोग?

+0

मुझे एक funtion या तालिका में डेटा डालने की प्रक्रिया बनाकर डेटा डालने की आवश्यकता है app_for_leave – 09Q71AO534

+0

पोस्टग्रेज़ में संग्रहित प्रक्रियाएं नहीं हैं, हालांकि यह समर्थन कार्यों का समर्थन करता है .. –

+0

इसलिए डीएमएल भाषा प्रश्नों को छोड़कर डेटा डालने का कोई अन्य तरीका नहीं है ISERT कथन .. या इस @ माइक क्रिस्टेनसेन – 09Q71AO534

उत्तर

22

पोस्टग्रेएसक्यूएल doesn't support stored procedures, प्रति से, लेकिन आप एक फ़ंक्शन का उपयोग करके एक ही परिणाम प्राप्त कर सकते हैं। उदाहरण के लिए: Pg के संग्रहीत फ़ंक्शन पर

select * from MyInsert(1,101,'2013-04-04','2013-04-04',2,'f'); 

मुख्य सीमाओं - सच संग्रहित प्रक्रियाओं की तुलना में - कर रहे हैं::

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; 

फिर आप यह इतना की तरह कॉल कर सकते हैं

  1. करने में असमर्थता कई परिणाम सेट
  2. स्वायत्त लेनदेन के लिए कोई समर्थन नहीं है (BEGIN, COMMIT और फ़ंक्शन के भीतर रोलबैक)
  3. SQL-मानक कॉल सिंटैक्स के लिए कोई समर्थन नहीं है, हालांकि ओडीबीसी और जेडीबीसी ड्राइवर आपके लिए कॉल का अनुवाद करेंगे।

Example

+0

@ user2561626 - आपको पहले 'FUNCTION'' बनाना होगा। ऊपर दिए गए मेरे उदाहरण का प्रयोग करें, मैंने इसे अपने स्वयं के सर्वर पर पोस्टग्रेस 9.2 के साथ सत्यापित किया है। –

+0

plpgsql स्वायत्त लेनदेन का समर्थन नहीं करता है, लेकिन अन्य भाषाएं, उदाहरण के लिए plperl। आप शायद dblink और plproxy का उपयोग कर इसे पूरा कर सकते हैं। – bma

+0

@ user2561626 - [उदाहरण] (http://sqlfiddle.com/#!12/89188/2) –

2

PostgreSQL संग्रहीत नहीं करता है समर्थन प्रक्रियाओं, लेकिन आप एक समारोह का उपयोग कर एक ही परिणाम प्राप्त कर सकते हैं।

जो भी डेटा आप तालिका में डालना चाहते हैं उसे आपके द्वारा बनाए जा रहे फ़ंक्शन के पैरामीटर के रूप में दिया जाता है।

बना सकते हैं या REPLACE का प्रतिनिधित्व करता है, तो एक ही नाम (आप उपयोग कर रहे) के साथ एक समारोह पहले से ही डेटाबेस में मौजूद है, तो यह वरना प्रतिस्थापित किया जाएगा यदि एक ही नाम के साथ कोई समारोह वर्तमान फिर एक नया कार्य नहीं है उत्पन्न होगा।

आपको फ़ंक्शन के शरीर के अंदर प्रविष्टि क्वेरी लिखनी है।

CREATE OR REPLACE FUNCTION Insert_into_table(_sno INTEGER, _eid INTEGER, _ename VARCHAR(20), _sd DATE, _ed DATE, _sid INTEGER) 
     RETURNS void AS 
     $BODY$ 
      BEGIN 
      INSERT INTO app_for_leave(sno, eid, sd, ed, sid) 
      VALUES(_sno, _eid, _sd, _ed, _sid); 
      END; 
     $BODY$ 
     LANGUAGE 'plpgsql' VOLATILE 
     COST 100; 

आप पहले से ही स्तंभस्थिति के लिए तालिका में एक डिफ़ॉल्ट मान का उल्लेख किया है के रूप में, अब यह उस स्तंभ

यहाँ में डेटा सम्मिलित करने की कोई जरूरत SQLFiddle है आपकी समझ के लिए लिंक

संबंधित मुद्दे

 संबंधित मुद्दे