Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

relacion y inserccion tipo factura

Estas en el tema de relacion y inserccion tipo factura en el foro de PostgreSQL en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 27/11/2012, 10:10
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
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;
  #2 (permalink)  
Antiguo 27/11/2012, 13:17
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 13 años, 7 meses
Puntos: 6
Respuesta: relacion y inserccion tipo factura

amigos lo soluciene

primero de clare una variable cat int y cada la cual tomaba el valor cada vez que iteraba , adema en la tabla quite el array y lo coloque solo entero

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.   id_cat_s INTEGER[]
  6. ) RETURNS INTEGER AS $$
  7. DECLARE
  8. id_tabla BIGINT;
  9. cat INT;
  10. BEGIN
  11. id_tabla := secuenciaa();
  12. 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);
  13. FOR i IN 1..array_upper(id_cat_s,1) LOOP
  14. cat =id_cat_s[i];
  15. INSERT INTO subfenomenos VALUES (NEXTVAL('subfenomenos_id_sub_fenomeno_seq'),id_tabla,cat);
  16. END LOOP;
  17.  
  18. RETURN id_tabla;
  19. END;
  20. $$ LANGUAGE plpgsql;

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. }

Etiquetas: factura, relacion, sql, tabla, tipo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:28.