Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/11/2012, 10:10
Montes28
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 1 mes
Puntos: 6
relacion y inserccion tipo factura

hola amigos espero me puedan ayudar

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
  1. CREATE TABLE actividad
  2. (
  3.   id_actividad serial NOT NULL,
  4.   fec_ini_actividad DATE,
  5.   fec_fin_actividad DATE,
  6.   hor_ini_actividad CHARACTER VARYING(30),
  7.   hor_fin_actividad CHARACTER VARYING(30),
  8.   fen_actividad INTEGER,
  9.   vol_actividad INTEGER,
  10.   ban_actividad CHARACTER VARYING(20),
  11.   nba_actividad INTEGER,
  12.   rep_actividad INTEGER,
  13.   obs_actividad text,
  14.   CONSTRAINT pk_actividad PRIMARY KEY (id_actividad)
  15. )

segunda tabla
Código SQL:
Ver original
  1. CREATE TABLE subfenomenos
  2. (
  3.   id_sub_fenomeno serial NOT NULL,
  4.   id_actividad INTEGER,
  5.   id_cat INTEGER[],
  6.   CONSTRAINT pk_subfenomenos PRIMARY KEY (id_sub_fenomeno),
  7.   CONSTRAINT fk_sub_act FOREIGN KEY (id_actividad)
  8.       REFERENCES actividad (id_actividad) MATCH SIMPLE
  9.       ON UPDATE CASCADE ON DELETE CASCADE
  10. )


tercera tabla
Código SQL:
Ver original
  1. CREATE TABLE categoria
  2. (
  3.   id_categoria serial NOT NULL,
  4.   nombre_categoria CHARACTER VARYING(50),
  5.   observaciones_categoria text,
  6.   CONSTRAINT pk_categoria PRIMARY KEY (id_categoria)
  7. )


y mi funcion

Código SQL:
Ver original
  1. 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,
  2.   rep_actividad INTEGER,
  3.   obs_actividad text,
  4.   id_cat INTEGER[]
  5. ) RETURNS INTEGER AS $$
  6. DECLARE
  7. id_tabla BIGINT;
  8. BEGIN
  9. id_tabla := secuenciaa();
  10. 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);
  11. FOR i IN 1..array_upper(id_cat,1) LOOP
  12. END LOOP;
  13. INSERT INTO subfenomenos VALUES (NEXTVAL('subfenomenos_id_sub_fenomeno_seq'),id_tabla,id_cat);
  14. RETURN id_tabla;
  15. END;
  16. $$ LANGUAGE plpgsql;