Sería algo así:
    
Código SQL:
Ver original- CREATE OR REPLACE FUNCTION inserciones(fec_ini_actividad DATE,fec_fin_actividad DATE,hor_ini_actividad CHARACTER VARYING(30),hor_fin_actividad CHARACTER VARYING(30),fen_actividad INTEGER,vol_actividad INTEGER,ban_actividad CHARACTER VARYING(20),nba_actividad INTEGER, 
-   rep_actividad CHARACTER VARYING(30), 
-   obs_actividad text, 
-   id_cat INTEGER, 
-   id_cat INTEGER[] 
- ) RETURNS INTEGER AS $$ 
- DECLARE 
- id_tabla BIGINT; 
- BEGIN 
- id_tabla := secuenciaa(); 
- INSERT INTO actividad VALUES (id_tabla,fec_ini_actividad,fec_fin_actividad,hor_ini_actividad,hor_fin_actividad,fen_actividad,vol_actividad,ban_actividad,nba_actividad,rep_actividad,obs_actividad); 
- FOR i IN 1..array_upper(id_cat,1) LOOP 
- INSERT INTO subfenomenos VALUES (NEXTVAL('subfenomenos_id_sub_fenomeno_seq'),id_tabla,i); 
- END LOOP; 
- RETURN id_tabla; 
- END; 
- $$ LANGUAGE plpgsql; 
Con el array_upper sabes la cantidad de elementos que tiene el array. Con el for los recorres todos y haces una inserción por cada uno.