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. hola amigos espero me puedan ayudar tengo dos tablas en la primera tengo un campo serial el cual va ser foranea en la segunda tabla ...

  #1 (permalink)  
Antiguo 12/11/2012, 21:51
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 2 meses
Puntos: 6
Secuencia para dos tablas

hola amigos espero me puedan ayudar

tengo dos tablas

en la primera tengo un campo serial el cual va ser foranea en la segunda tabla como puedo saber para que siempre sean los mismos valores.


esta es mi primera tabla

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 character varying(30),
obs_actividad text,
CONSTRAINT pk_actividad PRIMARY KEY (id_actividad)
)


mi segunda tabla


CREATE TABLE subfenomenos
(
id_sub_fenomeno serial NOT NULL,
id_actividad integer,
id_cat integer,
CONSTRAINT pk_subfenomenos PRIMARY KEY (id_sub_fenomeno)
)


id_actividad serial(actividad) id_actividad integer(subfenomenos)

necesito que estos dos campos sean iguales

Última edición por Montes28; 13/11/2012 a las 07:00
  #2 (permalink)  
Antiguo 13/11/2012, 08:50
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 9 meses
Puntos: 89
Respuesta: Secuencia para dos tablas

Haz uno FK del otro.
  #3 (permalink)  
Antiguo 13/11/2012, 10:36
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Secuencia para dos tablas

Heimish2000 gracias por responder lo que pasa es que los dos insert se van a realizar al mismo tiempo

se puede hacer lo me indicas

me explico:
estoy trabajando con php y tengo un formulario para ingresar

para la primera tabla se inserta bien y para la segunda consulto en que valor va la secuencia
SELECT last_value + 1 FROM actividad_id_actividad_seq

pero al ALTER SEQUENCE actividad_id_actividad_seq restart 1;

no me va a funcionar
  #4 (permalink)  
Antiguo 13/11/2012, 10:41
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 9 meses
Puntos: 89
Respuesta: Secuencia para dos tablas

Claro que se puede, primero haces un insert en la tabla padre y luego en la tabla hija

Lo que no entiendo es para qué quieres hacer un restart.
  #5 (permalink)  
Antiguo 13/11/2012, 10:46
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Secuencia para dos tablas

osea actualmente estoy probando y ya cuando el sistema se vaya implementar debo de reiniar la secuencia .
  #6 (permalink)  
Antiguo 13/11/2012, 10:57
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 9 meses
Puntos: 89
Respuesta: Secuencia para dos tablas

Y también tendrás que borras todos los datos. Lo mejor es que hicieras un DROP de todas tus tablas y las crees nuevas y vacias.
  #7 (permalink)  
Antiguo 13/11/2012, 11:05
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Secuencia para dos tablas

Heimish2000

hice lo que me dijiste , lo de la fk

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_actividad FOREIGN KEY (id_actividad)
REFERENCES actividad (id_actividad) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)

el primer insert lo realizo de la siguiente manera

Código PHP:
Ver original
  1. INSERT INTO actividad (id_actividad,fec_ini_actividad,fec_fin_actividad,hor_ini_actividad,hor_fin_actividad,fen_actividad,vol_actividad,ban_actividad,nba_actividad,rep_actividad,obs_actividad)
  2.                                  VALUES (nextval('actividad_id_actividad_seq'),:fec_ini_actividad,:fec_fin_actividad,:hor_ini_actividad,:hor_fin_actividad,:fen_actividad,:vol_actividad,:ban_actividad,:nba_actividad,:rep_actividad,:obs_actividad)

y para el segundo insert como referencio la llave foranea

pero el segundo
  #8 (permalink)  
Antiguo 13/11/2012, 11:39
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 9 meses
Puntos: 89
Respuesta: Secuencia para dos tablas

Puedes buscarlo con una subselect, o guardartelo en una variable, o...

Busca un poco en google cómo se hacen inserts en cascada
  #9 (permalink)  
Antiguo 13/11/2012, 12:27
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Secuencia para dos tablas

Heimish2000 he buscado inserts en cascada pero no logro realizar mi cometido , podrias darme un ejemplo?
  #10 (permalink)  
Antiguo 13/11/2012, 13:10
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

La mas facil es declarar en el pl una variable id_tabla de tipo biginteger


Traer el valor de la secuencia
Código SQL:
Ver original
  1. id_tabla := NEXTVAL('actividad_id_actividad_seq');


E insertarlos en ambas tablas
Código SQL:
Ver original
  1. INSERT INTO tabla1 VALUES(id_tabla.......
  2.  
  3. INSERT INTO tabla2 VALUES(id_tabla.......
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #11 (permalink)  
Antiguo 13/11/2012, 13:19
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Secuencia para dos tablas

huesos52 gracias por contestar

pero tengo un problema me encuentro trabajando con pgAdminIII como hago lo que me dices

Cita:
id_tabla := NEXTVAL('actividad_id_actividad_seq');
debo de crear un procedimiento almacenado?

funcion ?

trigger?

leyendo un poco lo iniciaria asi , por favor me corrigen

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION secuenciaa() RETURNS INTEGER AS $$
  2. DECLARE
  3.     id_tabla BIGINT;
  4. BEGIN
  5. id_tabla := NEXTVAL('actividad_id_actividad_seq');
  6. RETURN id_tabla;
  7. END;
  8. $$ LANGUAGE plpgsql;

y compruebo

Código SQL:
Ver original
  1. SELECT secuenciaa();

tengo una pregunta como realizo el insert ?

INSERT INTO actividad (id_actividad,....)
VALUES ( ?)

Última edición por Montes28; 13/11/2012 a las 14:42
  #12 (permalink)  
Antiguo 13/11/2012, 21:34
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

Montes, cuentanos que vas a hacer y como lo vas a hacer.
yo lo que me imagino es un pl que inserte en 2 tablas.

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION secuenciaa() RETURNS INTEGER AS $$
  2. DECLARE
  3.     id_tabla BIGINT;
  4. BEGIN
  5. id_tabla := NEXTVAL('actividad_id_actividad_seq');
  6. INSERT INTO tabla1 VALUES(id_tabla,otroscampos.......
  7. INSERT INTO tabla2 VALUES(id_tabla,otroscampos.......
  8. RETURN id_tabla;
  9. END;
  10. $$ LANGUAGE plpgsql;
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #13 (permalink)  
Antiguo 13/11/2012, 22:00
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Secuencia para dos tablas

huesos52 gracias por responder

quiero hacer lo que me indicas

Cita:
yo lo que me imagino es un pl que inserte en 2 tablas
Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION secuenciaa() RETURNS INTEGER AS $$
  2. DECLARE
  3.     id_tabla BIGINT;
  4. BEGIN
  5. id_tabla := NEXTVAL('actividad_id_actividad_seq');
  6. INSERT INTO actividad VALUES (id_tabla,'','','','','','','','','','')
  7. RETURN id_tabla;
  8. END;
  9. $$ LANGUAGE plpgsql;


pero no me funciona lo que me indicas que estoy haciendo mal?
  #14 (permalink)  
Antiguo 13/11/2012, 22:03
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

No recuerdo bien la sintaxis en postgresql.

Pero debe ser:
SELECT NEXTVAL('actividad_id_actividad_seq') INTO id_tabla

o algo asi.

Pero esa es la idea.

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

hola huesos52 por favor explicame un poco para poder finalizar en pgAdminIII ejecuto lo siguiente

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION secuenciaa() RETURNS INTEGER AS $$
  2. DECLARE
  3.     id_tabla BIGINT;
  4. BEGIN
  5. id_tabla := NEXTVAL('actividad_id_actividad_seq');
  6. INSERT INTO actividad VALUES (id_tabla,'2012-11-13','2012-11-13','22:32','22:32',1,1,1,1,1,1);
  7. INSERT INTO subfenomenos VALUES (NEXTVAL('subfenomenos_id_sub_fenomeno_seq'),id_tabla,1);
  8. RETURN id_tabla;
  9. END;
  10. $$ LANGUAGE plpgsql;

obtengo como resultado
Query returned successfully with no result in 14 ms.


para poder realizar el insert tengo que ejecutar
SELECT secuenciaa();


osea que con php me toca organizar los parametros que recibo por post o get y ejecutar CREATE OR REPLAC...... y SELECT secuenciaa();

Última edición por Montes28; 13/11/2012 a las 23:18
  #16 (permalink)  
Antiguo 14/11/2012, 10:49
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

No. Intenta lo siguiente:
Crear esta funcion:
Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION secuenciaa() RETURNS INTEGER AS $$
  2. DECLARE
  3.     id_tabla BIGINT;
  4. BEGIN
  5. id_tabla := NEXTVAL('actividad_id_actividad_seq');
  6. RETURN id_tabla;
  7. END;
  8. $$ LANGUAGE plpgsql;

Posterior crear otra función.
Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION inserciones() RETURNS INTEGER AS $$
  2. DECLARE
  3.     id_tabla BIGINT;
  4. BEGIN
  5. id_tabla := secuenciaa();
  6. INSERT INTO actividad VALUES (id_tabla,'2012-11-13','2012-11-13','22:32','22:32',1,1,1,1,1,1);
  7. INSERT INTO subfenomenos VALUES (NEXTVAL('subfenomenos_id_sub_fenomeno_seq'),id_tabla,1);
  8. RETURN id_tabla;
  9. END;
  10. $$ LANGUAGE plpgsql;

En teoría ahi debe funcionar.

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

huesos52 gracias por responder
tengo un interrogante:los datos son enviados por post y hasta donde tengo entendido estos no se los puedo pasar a la funcion ?

entonces no se como realizar el insert con las variables que me llegan post
  #18 (permalink)  
Antiguo 14/11/2012, 13:09
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

CREATE OR REPLACE FUNCTION inserciones() RETURNS integer AS $$

Esto es un ejemplo hipotetico de una función.

Si la creas así:
CREATE OR REPLACE FUNCTION inserciones(parametro1 integer,parametro2 varchar) RETURNS integer AS $$

Vas a poder traer tus variables post o get o como quieras
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #19 (permalink)  
Antiguo 14/11/2012, 13:43
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Secuencia para dos tablas

huesos52 gracias por responder

me puedes dar un poco de claridad en este puento

actualmente asi inserto en la base de datos

$fec_ini_actividad=$_POST['fec_ini_actividad'] .........

INSERT INTO actividad (id_actividad,fec_ini_actividad,....) VALUES (nextval('actividad_id_actividad_seq'),fec_ini_act ividad..)

entonces lo que me indicas es que

tengo la variable $fec_ini_actividad (en php)

osea como vos me indicas

Cita:
CREATE OR REPLACE FUNCTION inserciones(parametro1 integer,parametro2 varchar) RETURNS integer AS $$
$fec_ini_actividad seria el parametro 1, yo lo haria asi

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION inserciones(fec_ini_actividad DATE,.....) RETURNS INTEGER AS $$
  2. DECLARE
  3.     id_tabla BIGINT;
  4. BEGIN
  5. id_tabla := secuenciaa();
  6. INSERT INTO actividad VALUES (id_tabla,fec_ini_actividad DATE,....);
  7. INSERT INTO subfenomenos VALUES (NEXTVAL('subfenomenos_id_sub_fenomeno_seq'),id_tabla,1);
  8. RETURN id_tabla;
  9. END;
  10. $$ LANGUAGE plpgsql;


la prueba la estoy realizando en pgAdminIII

y primero ejecuto el CREATE OR REPLACE FUNCTION inserciones() RETURNS integer AS $$....

y despues SELECT inserciones();

o si no no realiza las insercciones

desde php me tocaria lo mismo ? primero ejecutar la FUNCTION y despues SELECT inserciones(); ??? estoy un poco confundido
  #20 (permalink)  
Antiguo 17/11/2012, 09:08
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Secuencia para dos tablas

hola amigos tengo un problema al ejecutar el procedimiento almacenado

Código SQL:
Ver original
  1. SELECT inserciones('2012-11-13','2012-11-13','22:32','22:32',1,1,1,1,1,1,88);


y obtengo este error
Código SQL:
Ver original
  1. ERROR:  no existe la función inserciones(UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN, INTEGER, INTEGER, INTEGER, INTEGER, INTEGER, INTEGER, INTEGER)
  2. LINE 1: SELECT inserciones('2012-11-13','2012-11-13','22:32','22:32'...
  3.                ^
  4. HINT:  Ninguna función coincide en el nombre y tipos de argumentos. Puede desear agregar conversión explícita de tipos.
  5.  
  6. ********** Error **********
  7.  
  8. ERROR: no existe la función inserciones(UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN, INTEGER, INTEGER, INTEGER, INTEGER, INTEGER, INTEGER, INTEGER)
  9. SQL state: 42883
  10. Hint: Ninguna función coincide en el nombre y tipos de argumentos. Puede desear agregar conversión explícita de tipos.
  11. CHARACTER: 8



esta es la 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 CHARACTER VARYING(30),
  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. INSERT INTO subfenomenos VALUES (NEXTVAL('subfenomenos_id_sub_fenomeno_seq'),id_tabla,id_cat);
  12. RETURN id_tabla;
  13. END;
  14. $$ LANGUAGE plpgsql;
  #21 (permalink)  
Antiguo 17/11/2012, 11:49
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

Código SQL:
Ver original
  1. SELECT inserciones(TO_DATE('2012-11-13','YYYY-MM-DD'),
  2. TO_DATE('2012-11-13','YYYY-MM-DD'),
  3. '22:32','22:32',1,1,1,1,1,'1',88);

El sistema no las reconoce como variables date que es como estan decladas. Por eso es necesario usar la función to_date para llevarlas alla.

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

huesos gracias por responder

estoy haciendo lo que me indicas pero obtengo un error


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','22:32',1,1,1,1,1,'1',88);

ERROR: no existe la función inserciones(date, date, unknown, unknown, integer, integer, integer, integer, integer, unknown, integer)
LINE 1: SELECT inserciones(TO_DATE('2012-11-17','YYYY-MM-DD'),TO_DAT...
^
HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede desear agregar conversión explícita de tipos.

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

ERROR: no existe la función inserciones(date, date, unknown, unknown, integer, integer, integer, integer, integer, unknown, integer)
  #23 (permalink)  
Antiguo 17/11/2012, 12:08
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

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,1,1,1,1,1,88);

lo mismo, problema de casteo con las horas
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #24 (permalink)  
Antiguo 17/11/2012, 12:28
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Secuencia para dos tablas

huesos gracias por responder

tampoco funciono


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,1,1,1,1,'1',88);


ERROR: no existe la función inserciones(date, date, character varying, character varying, integer, integer, integer, integer, integer, unknown, integer)
LINE 1: SELECT inserciones(TO_DATE('2012-11-17','YYYY-MM-DD'),TO_DAT...
^
HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede desear agregar conversión explícita de tipos.

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

ERROR: no existe la función inserciones(date, date, character varying, character varying, integer, integer, integer, integer, integer, unknown, integer)
SQL state: 42883
Hint: Ninguna función coincide en el nombre y tipos de argumentos. Puede desear agregar conversión explícita de tipos.
Character: 8
  #25 (permalink)  
Antiguo 17/11/2012, 12:30
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

quitale las comillas al penultimo parametro.

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,1,1,1,1,1,88);
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #26 (permalink)  
Antiguo 17/11/2012, 12:31
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Secuencia para dos tablas

se las quite y no funciona

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,1,1,1,1,1,88);


ERROR: no existe la función inserciones(date, date, character varying, character varying, integer, integer, integer, integer, integer, integer, integer)
LINE 1: SELECT inserciones(TO_DATE('2012-11-17','YYYY-MM-DD'),TO_DAT...
^
HINT: Ninguna función coincide en el nombre y tipos de argumentos. Puede desear agregar conversión explícita de tipos.

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

ERROR: no existe la función inserciones(date, date, character varying, character varying, integer, integer, integer, integer, integer, integer, integer)
SQL state: 42883
Hint: Ninguna función coincide en el nombre y tipos de argumentos. Puede desear agregar conversión explícita de tipos.
Character: 8
  #27 (permalink)  
Antiguo 17/11/2012, 12:36
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

montes lo que estamos haciendo es mirando cada tipo de dato d la funcion que creaste y llevarlo al tipo de dato correcto. a eso se refiere el error.

toma tu funcion inserciones y mira exactamente que campos tiene y que tipo de dato requieren.
Luego la llamas en el orden exacto con las conversiones exactas.

Para convertir a fecha es con to_date. para convertir a character varying es ::character varying. etc etc.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #28 (permalink)  
Antiguo 19/11/2012, 23:07
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Secuencia para dos tablas

hola huesos

tenias toda la razon , yo tenia errores en que no le estaba enviando bien los campos

pero tengo un problema

a la segunda tabla necesito insertarle varios registros



lo que pretendo realizar es como una factura (en la primera tabla inserto el encabezado y la segunda los items de la factura )


esta es la funcion que estoy utilizando

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION inserciones(fec_ini_actividad DATE, fec_fin_actividad DATE, hor_ini_actividad CHARACTER VARYING, hor_fin_actividad CHARACTER VARYING, fen_actividad INTEGER, vol_actividad INTEGER, ban_actividad CHARACTER VARYING, nba_actividad INTEGER, rep_actividad CHARACTER VARYING, obs_actividad text, id_cat INTEGER)
  2.   RETURNS INTEGER AS
  3. $BODY$
  4. DECLARE
  5. id_tabla BIGINT;
  6. BEGIN
  7. id_tabla := secuenciaa();
  8. 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);
  9. INSERT INTO subfenomenos VALUES (NEXTVAL('subfenomenos_id_sub_fenomeno_seq'),id_tabla,id_cat);
  10. RETURN id_tabla;
  11. END;
  12. $BODY$
  13.   LANGUAGE 'plpgsql' VOLATILE
  14.   COST 100;
  15. ALTER FUNCTION inserciones(DATE, DATE, CHARACTER VARYING, CHARACTER VARYING, INTEGER, INTEGER, CHARACTER VARYING, INTEGER, CHARACTER VARYING, text, INTEGER) OWNER TO postgres;
  #29 (permalink)  
Antiguo 20/11/2012, 09:19
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

Que tal montes

Pero cuales son los detalles?
Donde se encuentran almacenados?

Se me ocurre un ciclo for al interior de la función para recorrer los items que mencionas.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #30 (permalink)  
Antiguo 20/11/2012, 09:36
 
Fecha de Ingreso: septiembre-2010
Mensajes: 1.853
Antigüedad: 14 años, 2 meses
Puntos: 6
Respuesta: Secuencia para dos tablas

huesos gracias por responder

los datos que se van a insertar a las dos tablas son enviados al mismo tiempo

en la primera tabla actividad (tabla padre )

en la segunda tabla subfenomenos (tabla hijo )

y necesito que en la tabla hijo se inserte el valor de la secuencia esa parte ya se realiza con la funcion que me ayudaste a construir

necesito que el segundo insert se repita dependiendo los detalles que se envien

me indicas de un ciclo for pero como le paso el valor limite de ese ciclo?

esta es la funcion que tengo

Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION inserciones(fec_ini_actividad DATE, fec_fin_actividad DATE, hor_ini_actividad CHARACTER VARYING, hor_fin_actividad CHARACTER VARYING, fen_actividad INTEGER, vol_actividad INTEGER, ban_actividad CHARACTER VARYING, nba_actividad INTEGER, rep_actividad CHARACTER VARYING, obs_actividad text, id_cat INTEGER)
  2.   RETURNS INTEGER AS
  3. $BODY$
  4. DECLARE
  5. id_tabla BIGINT;
  6. BEGIN
  7. id_tabla := secuenciaa();
  8. 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);
  9. INSERT INTO subfenomenos VALUES (NEXTVAL('subfenomenos_id_sub_fenomeno_seq'),id_tabla,id_cat);
  10. RETURN id_tabla;
  11. END;
  12. $BODY$
  13.   LANGUAGE 'plpgsql' VOLATILE
  14.   COST 100;
  15. ALTER FUNCTION inserciones(DATE, DATE, CHARACTER VARYING, CHARACTER VARYING, INTEGER, INTEGER, CHARACTER VARYING, INTEGER, CHARACTER VARYING, text, INTEGER) OWNER TO postgres;

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 09:19.