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

PostgreSQL PL/pgSQL में लेनदेन शुरू/समाप्त नहीं कर सकता

एक plpgsql फ़ंक्शन स्वचालित रूप से एक लेनदेन के अंदर चलता है। यह सब सफल होता है या यह सब विफल रहता है। मैनुअल:

<ब्लॉकक्वॉट>

कार्यों और ट्रिगर प्रक्रियाओं को हमेशा बाहरी क्वेरी द्वारा स्थापित लेनदेन के भीतर निष्पादित किया जाता है - वे उस लेनदेन को शुरू या प्रतिबद्ध नहीं कर सकते हैं, क्योंकि उनके लिए निष्पादित करने के लिए कोई संदर्भ नहीं होगा। हालांकि, एक ब्लॉक जिसमें EXCEPTION होता है क्लॉज प्रभावी रूप से एक उप-लेनदेन बनाता है जिसे बाहरी लेनदेन को प्रभावित किए बिना वापस लाया जा सकता है। इसके बारे में अधिक जानकारी के लिए धारा 42.6.6 देखें।

इसलिए, यदि आप चाहते हैं, तो आप एक अपवाद को पकड़ सकते हैं जो सैद्धांतिक रूप से हो सकता है (लेकिन इसकी संभावना बहुत कम है)।
मैनुअल में ट्रैपिंग त्रुटियों पर विवरण।

आपके कार्य की समीक्षा की गई और सरलीकृत किया गया:

CREATE FUNCTION foo(v_weather text
                  , v_timeofday text
                  , v_speed text
                  , v_behavior text)
  RETURNS SETOF custombehavior
  LANGUAGE plpgsql AS
$func$
BEGIN

DELETE FROM custombehavior
WHERE  weather = 'RAIN'
AND    timeofday = 'NIGHT'
AND    speed = '45MPH';

INSERT INTO custombehavior (weather, timeofday, speed, behavior)
SELECT v_weather, v_timeofday, v_speed, v_behavior
WHERE  NOT EXISTS (
   SELECT FROM defaultbehavior
   WHERE  a = 'RAIN'
   AND    b = 'NIGHT'
   AND    c = '45MPH'
   );

RETURN QUERY
SELECT * FROM custombehavior WHERE ... ;

END
$func$;

अगर आपको वास्तव में लेन-देन शुरू/समाप्त करना है जैसा कि शीर्षक में दर्शाया गया है SQL प्रक्रियाओं . को देखें पोस्टग्रेज 11 या बाद के संस्करण में (CREATE PROCEDURE ) देखें:

  • PostgreSQL में, "संग्रहीत प्रक्रिया" और अन्य प्रकार के कार्यों में क्या अंतर है?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या SQL सर्वर प्रोफाइलर के बराबर PostgreSQL है?

  2. Postgresql - बैकअप डेटाबेस और विभिन्न स्वामी पर पुनर्स्थापित करें?

  3. PostgreSQL को अपरकेस टेबल नाम क्यों पसंद नहीं हैं?

  4. psycopg2 बड़ी क्वेरी के बाद मेमोरी लीक कर रहा है

  5. शब्दों की किसी भी सूची के लिए PostgreSQL वाइल्डकार्ड LIKE