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

Postgresql में किसी फ़ंक्शन में तालिका या पंक्तियों को कैसे पास करें?

एक पंक्ति को समग्र प्रकार द्वारा दर्शाया जाता है, जैसे

CREATE TYPE mytype  AS (
   id integer,
   name text,
   fromdate timestamp with time zone
);

आप इस तरह के प्रकार का उपयोग फ़ंक्शन तर्क के रूप में कर सकते हैं।

प्रत्येक PostgreSQL तालिका के लिए, स्वचालित रूप से समान नाम और स्तंभों वाला एक प्रकार मौजूद होता है:

CREATE TABLE mytable (
   id integer PRIMARY KEY,
   name text,
   fromdate timestamp with time zone NOT NULL
);

तो आप एक ऐसा फ़ंक्शन बना सकते हैं जो इस प्रकार की एक सरणी को तर्क के रूप में लेता है:

CREATE OR REPLACE FUNCTION myfunc(arg mytable[]) RETURNS void
   LANGUAGE plpgsql IMMUTABLE STRICT AS
$$DECLARE
   t mytable;
BEGIN
   FOREACH t IN ARRAY arg LOOP
      RAISE NOTICE 'id = %', t.id;
   END LOOP;
END;$$;

आप इसे इस तरह कह सकते हैं (यह मानते हुए कि mytable . में दो पंक्तियाँ हैं ):

SELECT myfunc(array_agg(mytable)) FROM mytable;
NOTICE:  id = 1
NOTICE:  id = 2
┌────────┐
│ myfunc │
├────────┤
│        │
└────────┘
(1 row)

वैकल्पिक रूप से, आप एक ऐसा फ़ंक्शन बना सकते हैं जो कर्सर को तर्क के रूप में लेता है:

CREATE OR REPLACE FUNCTION myfunc(arg refcursor) RETURNS void
   LANGUAGE plpgsql IMMUTABLE STRICT AS
$$DECLARE
   t mytable;
BEGIN
   LOOP
      FETCH NEXT FROM arg INTO t;
      EXIT WHEN NOT FOUND;
      RAISE NOTICE 'id = %', t.id;
   END LOOP;
END;$$;

इसे लेन-देन में इस प्रकार कहा जा सकता है:

BEGIN;
DECLARE c CURSOR FOR SELECT * FROM mytable;
SELECT myfunc('c');

NOTICE:  id = 1
NOTICE:  id = 2
┌────────┐
│ myfunc │
├────────┤
│        │
└────────┘
(1 row)

COMMIT;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql से MySQL में प्रश्नों पर चयन DISTINCT परिवर्तित करना

  2. पोस्टग्रेस्क्ल में स्ट्रिंग अक्षर और एस्केप वर्ण

  3. psql:FATAL:डेटाबेस <उपयोगकर्ता> मौजूद नहीं है

  4. PostgreSQL में यूजर पासवर्ड कैसे बदलें

  5. स्प्रिंग बूट, पोस्टग्रेएसक्यूएल और डॉकर - कंटेनर में चलने के दौरान कनेक्शन अस्वीकृत