CREATE TABLE ejemplo_select_in ( id integer, nombre text, edad integer ); INSERT INTO ejemplo_select_in (id, nombre, edad) VALUES (1, 'nombre 1', 20); INSERT INTO ejemplo_select_in (id, nombre, edad) VALUES (2, 'nombre 2', 20); INSERT INTO ejemplo_select_in (id, nombre, edad) VALUES (3, 'nombre 3', 20); INSERT INTO ejemplo_select_in (id, nombre, edad) VALUES (7, 'nombre 7', 25); INSERT INTO ejemplo_select_in (id, nombre, edad) VALUES (4, 'nombre 4', 50); INSERT INTO ejemplo_select_in (id, nombre, edad) VALUES (5, 'nombre 5', 50); INSERT INTO ejemplo_select_in (id, nombre, edad) VALUES (6, 'nombre 6', 25); CREATE TYPE type_select_in AS ( id INTEGER, nombre TEXT, edad INTEGER ); CREATE OR REPLACE FUNCTION sp_get_personas(_edad integer) RETURNS SETOF type_select_in AS $BODY$ DECLARE retval record; begin for retval in SELECT * FROM ejemplo_select_in WHERE edad = _edad Loop return next retval; end loop ; end; $BODY$ LANGUAGE 'plpgsql' VOLATILE; CREATE OR REPLACE FUNCTION sp_get_personas(_edad INTEGER[]) RETURNS SETOF type_select_in AS $BODY$ DECLARE retval record; BEGIN FOR retval IN SELECT * FROM ejemplo_select_in WHERE edad = ANY(_edad) LOOP RETURN NEXT retval; END LOOP ; END; $BODY$ LANGUAGE 'plpgsql' VOLATILE; SELECT * FROM sp_get_personas(25); SELECT * FROM sp_get_personas(ARRAY[25,50]);