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

Secuencia para dos tablas

Estas en el tema de Secuencia para dos tablas en el foro de PostgreSQL en Foros del Web. Cita: necesito que el segundo insert se repita dependiendo los detalles que se envien Ok, pero por donde se envian estos detalles? Van a entrar ...

  #31 (permalink)  
Antiguo 20/11/2012, 09:58
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Secuencia para dos tablas

Cita:
necesito que el segundo insert se repita dependiendo los detalles que se envien
Ok, pero por donde se envian estos detalles?

Van a entrar como parametros a la misma función?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #32 (permalink)  
Antiguo 20/11/2012, 10:01
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Secuencia para dos tablas

pues es que esos detalles pueden ser uno o vario y no sabria como hacerlo para que entraran a la funcion o vos que me recomendarias?
  #33 (permalink)  
Antiguo 20/11/2012, 10:05
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Secuencia para dos tablas

Yo te recomendaría el uso de arrays
http://www.postgresql.org/docs/9.0/i...ve/arrays.html

La idea sería que desde tu aplicación, armaras el array y se lo enviaras como parametro de entrada a la función. Una vez se tenga el array lleno, puede ser recorrido con ciclos for (tal como te comenté) e insertarse en las tablas tantos detalles tenga el array.

Pegale una lectura al enlace, haz unas pruebas, mira como funciona este tema y empieza tu desarrollo.

Si te surgen preguntas de la lectura o de los ejemplos vuelves y posteas.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #34 (permalink)  
Antiguo 20/11/2012, 22:30
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Secuencia para dos tablas

desde mi aplicacion armo el array

Código PHP:
Ver original
  1. <input type='checkbox' name='opcion[]' value=" . $fila['id_categoria']." id=" . $fila['nom_categoria']." />

en el servidor almaceno el array en una variable
Código PHP:
Ver original
  1. $id_cat = $_POST['opcion'];

$id_cat sera el parametro de entrada a la función

esta es mi funcion en la cual tengo como parametro de entrada id_cat integer[]
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 CHARACTER VARYING(30),
  3.   obs_actividad text,
  4.   id_cat INTEGER,
  5.   id_cat INTEGER[]
  6. ) RETURNS INTEGER AS $$
  7. DECLARE
  8. id_tabla BIGINT;
  9. BEGIN
  10. id_tabla := secuenciaa();
  11. 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);
  12. INSERT INTO subfenomenos VALUES (NEXTVAL('subfenomenos_id_sub_fenomeno_seq'),id_tabla,id_cat);
  13. RETURN id_tabla;
  14. END;
  15. $$ LANGUAGE plpgsql;



en postgres cree una tabla con array
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. )


como itero el array y realizo la inserccion?
  #35 (permalink)  
Antiguo 21/11/2012, 07:50
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Secuencia para dos tablas

Sería algo así:

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 CHARACTER VARYING(30),
  3.   obs_actividad text,
  4.   id_cat INTEGER,
  5.   id_cat INTEGER[]
  6. ) RETURNS INTEGER AS $$
  7. DECLARE
  8. id_tabla BIGINT;
  9. BEGIN
  10. id_tabla := secuenciaa();
  11. 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);
  12. FOR i IN 1..array_upper(id_cat,1) LOOP
  13. INSERT INTO subfenomenos VALUES (NEXTVAL('subfenomenos_id_sub_fenomeno_seq'),id_tabla,i);
  14. END LOOP;
  15. RETURN id_tabla;
  16. END;
  17. $$ 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.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #36 (permalink)  
Antiguo 21/11/2012, 16:50
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Secuencia para dos tablas

estoy probando la inserccion pero no me funciona , estoy enviando el array de enteros

Código SQL:
Ver original
  1. SELECT inserciones(TO_DATE.................,'{1, 2, 3, 4}'::INTEGER[]);

tambien lo estoy haciendo asi

Código SQL:
Ver original
  1. SELECT inserciones(TO_DATE('2012-11-17','YYYY-MM-DD'),TO_DATE('2012-11-17','YYYY-MM-DD'),'22:32'::CHARACTER VARYING,'22:32'::CHARACTER VARYING,1::INTEGER,1::INTEGER,'ff'::CHARACTER VARYING,1::INTEGER,'ff'::CHARACTER VARYING,'1',array[725,749,766]);


este es el error

ERROR: la columna «id_cat» es de tipo integer[] pero la expresión es de tipo integer
LINE 1: ...LUES (NEXTVAL('subfenomenos_id_sub_fenomeno_seq'), $1 , $2 )
^
HINT: Necesitará reescribir la expresión o aplicarle una conversión de tipo.
QUERY: INSERT INTO subfenomenos VALUES (NEXTVAL('subfenomenos_id_sub_fenomeno_seq'), $1 , $2 )
CONTEXT: PL/pgSQL function "inserciones" line 7 at sentencia SQL

********** Error **********

ERROR: la columna «id_cat» es de tipo integer[] pero la expresión es de tipo integer
SQL state: 42804
Hint: Necesitará reescribir la expresión o aplicarle una conversión de tipo.
Context: PL/pgSQL function "inserciones" line 7 at sentencia SQL





qeu estoy haciendo mal?

Última edición por Montes28; 21/11/2012 a las 17:49

Etiquetas: secuencia, tabla, tablas
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 16:21.