एक पंक्ति को समग्र प्रकार द्वारा दर्शाया जाता है, जैसे
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;