necesito realizar una inserccion que relacione 3 tablas al estilo factura
creen una funcion para que la llave primaria de la primera tabla se relacione con un campo de la segunda
en la segunda tabla utilizo un campo array necesito relacionar ese campo con la llave primaria de la tercera tabla pero me sale error ya que son tipos de datos diferentes (id_cat integer[] - id_categoria), si cambio el array tengo un problema en la funcion porque en ella recibo un array y itero para realizar la insercciones
como puedo solucionar mi problema ?
estas son mis tablas y funcion
primera tabla
Código SQL:
Ver original
CREATE TABLE actividad ( id_actividad serial NOT NULL, 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 INTEGER, obs_actividad text, CONSTRAINT pk_actividad PRIMARY KEY (id_actividad) )
segunda tabla
Código SQL:
Ver original
CREATE TABLE subfenomenos ( id_sub_fenomeno serial NOT NULL, id_actividad INTEGER, id_cat INTEGER[], CONSTRAINT pk_subfenomenos PRIMARY KEY (id_sub_fenomeno), CONSTRAINT fk_sub_act FOREIGN KEY (id_actividad) REFERENCES actividad (id_actividad) MATCH SIMPLE ON UPDATE CASCADE ON DELETE CASCADE )
tercera tabla
Código SQL:
Ver original
CREATE TABLE categoria ( id_categoria serial NOT NULL, nombre_categoria CHARACTER VARYING(50), observaciones_categoria text, CONSTRAINT pk_categoria PRIMARY KEY (id_categoria) )
y mi funcion
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 INTEGER, obs_actividad text, 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 END LOOP; INSERT INTO subfenomenos VALUES (NEXTVAL('subfenomenos_id_sub_fenomeno_seq'),id_tabla,id_cat); RETURN id_tabla; END; $$ LANGUAGE plpgsql;