Use defined data type as the function parameter
postgres=#
postgres=# CREATE TYPE inventory_item AS (
postgres(# name text,
postgres(# supplier_id integer,
postgres(# price numeric
postgres(# );
CREATE TYPE
postgres=#
postgres=# CREATE TABLE on_hand (
postgres(# item inventory_item,
postgres(# count integer
postgres(# );
CREATE TABLE
postgres=#
postgres=# INSERT INTO on_hand VALUES (ROW('fuzzy dice', 42, 1.99), 1000);
INSERT 0 1
postgres=#
postgres=# select * from on_hand;
item | count
------------------------+-------
("fuzzy dice",42,1.99) | 1000
(1 row)
postgres=#
postgres=#
postgres=# CREATE FUNCTION price_extension(inventory_item, integer) RETURNS numeric
postgres-# AS 'SELECT $1.price * $2' LANGUAGE SQL;
CREATE FUNCTION
postgres=#
postgres=# select price_extension(ROW('fuzzy dice', 42, 1.99), 1000);
price_extension
-----------------
1990.00
(1 row)
postgres=#
postgres=# drop function price_extension(inventory_item, integer);
DROP FUNCTION
postgres=# drop table on_hand;
DROP TABLE
postgres=# drop type inventory_item;
DROP TYPE
postgres=#
postgres=#
Related examples in the same category