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

PL/pgSQL में पूरी पंक्ति अपडेट करें

यह है।
आप plpgsql में एक पंक्ति या रिकॉर्ड प्रकार के कॉलम अपडेट कर सकते हैं - जैसे आपके पास है। जाहिर है, यह काम करना चाहिए?

यह अंतर्निहित तालिका को अपडेट करेगा, निश्चित रूप से, चर नहीं!

UPDATE my_table SET date=now() WHERE id='1';

आप यहां दो चीजों को भ्रमित कर रहे हैं...

टिप्पणी में स्पष्टीकरण का उत्तर

मुझे नहीं लगता कि PostgreSQL में सिंटैक्स है जो UPDATE . कर सकता है एक पूरी पंक्ति। आप UPDATE कर सकते हैं एक कॉलम सूची , यद्यपि। इस डेमो पर विचार करें:

ध्यान दें कि मैं thedate का उपयोग कैसे करता हूं date . के बजाय कॉलम नाम के रूप में, date एक आरक्षित शब्द है प्रत्येक SQL मानक में और PostgreSQL में एक प्रकार का नाम।

CREATE TEMP TABLE my_table (id serial, thedate date);
INSERT INTO my_table(thedate) VALUES (now());

CREATE OR REPLACE FUNCTION test_up()
  RETURNS void LANGUAGE plpgsql AS
$func$
DECLARE
    _r my_table;
BEGIN
   SELECT * INTO _r FROM my_table WHERE id = 1;
   _r.thedate := now()::date + 5 ;

   UPDATE my_table t
    -- explicit list of columns to be to updated
   SET   (id, thedate) = (_r.id, _r.thedate)
   WHERE  t.id = 1;
END
$func$;

SELECT test_up();
SELECT * FROM my_table;

हालांकि, आप INSERT कर सकते हैं एक पूरी पंक्ति सरलता। बस तालिका के लिए एक कॉलम सूची की आपूर्ति न करें (जो आपको सामान्य रूप से करना चाहिए, लेकिन इस मामले में यह बिल्कुल ठीक है, नहीं)।

एक UPDATE के रूप में आंतरिक रूप से एक DELETE है उसके बाद INSERT वैसे भी, और एक फ़ंक्शन स्वचालित रूप से लेन-देन में सब कुछ समाहित कर देता है, मुझे नहीं लगता, आप इसके बजाय इसका उपयोग क्यों नहीं कर सके:

CREATE OR REPLACE FUNCTION x.test_ delins()
  RETURNS void LANGUAGE plpgsql AS
$func$
DECLARE
    _r my_table;
BEGIN
   SELECT * INTO _r
   FROM my_table WHERE id = 1;
   _r.thedate := now()::date + 10;

   DELETE FROM my_table t WHERE t.id = 1;
   INSERT INTO my_table SELECT _r.*;
END
$func$;


  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. पैरामीटर की संख्या/प्रकार को जाने बिना ड्रॉप फ़ंक्शन?

  3. एक्सटेंशन pg_trgm से % ऑपरेटर का उपयोग कैसे करें?

  4. SQLAlchemy में Postgres/PostGIS View के साथ काम करें

  5. किसी ऑब्जेक्ट में, किसी ऑब्जेक्ट में, किसी ऑब्जेक्ट में, किसी ऑब्जेक्ट में, किसी ऑब्जेक्ट में टेक्स्ट मान JSON से निकालने के लिए PostgreSQL क्वेरी बनाने का प्रयास कर रहा है