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

Funcion que ingresa, consulta y vuelve a ingresar

Estas en el tema de Funcion que ingresa, consulta y vuelve a ingresar en el foro de PostgreSQL en Foros del Web. Hola, quiero hacer una funcion en Postgres que ingrese datos en una tabla buque, luego que consulte el id del buque segun la matricula que ...
  #1 (permalink)  
Antiguo 27/05/2009, 08:11
Avatar de Beuses  
Fecha de Ingreso: marzo-2009
Ubicación: Maracaibo
Mensajes: 132
Antigüedad: 15 años, 8 meses
Puntos: 5
Pregunta Funcion que ingresa, consulta y vuelve a ingresar

Hola, quiero hacer una funcion en Postgres que ingrese datos en una tabla buque,

luego que consulte el id del buque segun la matricula que acaba de ingresar, para

que por ultimo ingrese ese id del buque en otra tabla llamada renave.

Habia hecho este codigo:

Código PHP:
BEGIN
IF (EXISTS (SELECT 1 FROM tbl_buque where num_matricula p_matricula)) THEN
    
RETURN 'Ya existe un buque con esa matricula';
ELSE
    
BEGIN
    INSERT INTO tbl_buque
(id_muelle,id_actividad,id_suministro,nombreusuario,num_matricula,nombre,bandera,capacidad_almacenamiento,eslora,manga,puntal,unidadarqueobruto,totalhp,indicador_suministro)
    
VALUES (p_idmuelle,p_actividad,p_idsuministro,p_nombreusuario,upper(p_matricula),p_nombre,p_bandera,p_capacidad,p_eslora,p_manga,p_puntal,p_arqueo,p_total,p_indicador);
    
SELECT id FROM tbl_buque WHERE num_matricula=p_matricula
     INSERT INTO tbl_renave
(id_buque,fecha,lugar)VALUES(id,to_date(p_fecharenave ,'DD/MM/YYYY'),p_lugar);
    
    
EXCEPTION
    WHEN OTHERS THEN
            
RETURN 'Ha ocurrido un error al ejecutar la instrucción';
    
END;
    RETURN 
'OK';
END IF;
END
Pero me salia este error:

Código PHP:
ERROR:  SELECT query has no destination for result data
HINT
:  If you want to discard the results, use PERFORM instead.
CONTEXT:  PL/pgSQL function "fn_insertar_buque" line 17 at SQL statement 

No se mucho de esto asi que quisiera ayuda. Se que estoy haciendo algo mal

pero no se que... :neurotico

Gracias de antemano.
  #2 (permalink)  
Antiguo 27/05/2009, 08:20
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: Funcion que ingresa, consulta y vuelve a ingresar

Que tal beuses..

Podrías poner el código completo?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 27/05/2009, 08:24
Avatar de Beuses  
Fecha de Ingreso: marzo-2009
Ubicación: Maracaibo
Mensajes: 132
Antigüedad: 15 años, 8 meses
Puntos: 5
Respuesta: Funcion que ingresa, consulta y vuelve a ingresar

ok, es este:

Código PHP:
CREATE OR REPLACE FUNCTION "schema_buque"."fn_insertar_buque" (p_nombreusuario varcharp_matricula varcharp_nombre varcharp_bandera varcharp_actividad integerp_arqueo realp_capacidad integerp_total realp_eslora realp_manga realp_puntal realp_idmuelle integerp_idsuministro integerp_indicador varcharp_fecharenave textp_lugar varcharRETURNS varchar AS
$body$
/*
eschema: schema_buque
nombre: fn_insertar_buque():varchar
autor: Jennifer Beuses
fecha: 26/05/2009
organismo: Ministerio del Poder Popular para la Energía y Petróleo - MENPET
función: inserta buques
*/
BEGIN
IF (EXISTS (SELECT 1 FROM tbl_buque where num_matricula p_matricula)) THEN
    
RETURN 'Ya existe un buque con esa matricula';
ELSE
    
BEGIN
    INSERT INTO tbl_buque
(id_muelle,id_actividad,id_suministro,nombreusuario,num_matricula,nombre,bandera,capacidad_almacenamiento,eslora,manga,puntal,unidadarqueobruto,totalhp,indicador_suministro)
    
VALUES (p_idmuelle,p_actividad,p_idsuministro,p_nombreusuario,upper(p_matricula),p_nombre,p_bandera,p_capacidad,p_eslora,p_manga,p_puntal,p_arqueo,p_total,p_indicador);
    
SELECT id FROM tbl_buque WHERE num_matricula=p_matricula
     INSERT INTO tbl_renave
(id_buque,fecha,lugar)VALUES(id,to_date(p_fecharenave ,'DD/MM/YYYY'),p_lugar);
    
    
EXCEPTION
    WHEN OTHERS THEN
            
RETURN 'Ha ocurrido un error al ejecutar la instrucción';
    
END;
    RETURN 
'OK';
END IF;
END;  
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER
  #4 (permalink)  
Antiguo 27/05/2009, 08:42
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: Funcion que ingresa, consulta y vuelve a ingresar

Beuses... no conozco mucho tu sistema... pero no le veo sentido a esta sentencia
SELECT id FROM tbl_buque WHERE num_matricula=p_matricula

Está sin punto y coma, y el que se ejecute, no afecta en nada la función.

Si lo que quieres, es recuperar el id que se acabó de insertar, tendrás que recurrir a una variable record para almacenarlo antes de utilizarlo en la inserción en tbl_renave.

Para ver, el modo de uso, de variables record y como obtener el valor de un campo y asignarlo a una variable, mira el 4to post de este tema
http://www.forosdelweb.com/f99/como-...rigger-702509/

Nos cuentas como te va.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 27/05/2009, 08:56
Avatar de Beuses  
Fecha de Ingreso: marzo-2009
Ubicación: Maracaibo
Mensajes: 132
Antigüedad: 15 años, 8 meses
Puntos: 5
De acuerdo Respuesta: Funcion que ingresa, consulta y vuelve a ingresar

Bien, muchas gracias huesos25...

Tenias razón, me faltaba una variable que almacenara el valor que estaba consultando.

Y el punto y coma que mencionas se lo borré sin querer.. :P

Pero en fin; Asi quedo mi función (por si a alguien le hace falta).

Código PHP:
DECLARE
v_flag integer;
BEGIN
IF (EXISTS (SELECT 1 FROM tbl_buque where num_matricula p_matricula)) THEN
    
RETURN 'Ya existe un buque con esa matricula';
ELSE
    
BEGIN
    INSERT INTO tbl_buque
(id_muelle,id_actividad,id_suministro,nombreusuario,num_matricula,nombre,bandera,capacidad_almacenamiento,eslora,manga,puntal,unidadarqueobruto,totalhp,indicador_suministro)
    
VALUES (p_idmuelle,p_actividad,p_idsuministro,p_nombreusuario,upper(p_matricula),p_nombre,p_bandera,p_capacidad,p_eslora,p_manga,p_puntal,p_arqueo,p_total,p_indicador);
    
    
SELECT INTO v_flag id FROM tbl_buque WHERE num_matricula=upper(p_matricula);
    
INSERT INTO tbl_renave(id_buque,fecha,lugar)VALUES(v_flag,to_date(p_fecharenave ,'DD/MM/YYYY'),p_lugar);
    

    
EXCEPTION
    WHEN OTHERS THEN
          
RETURN 'Ha ocurrido un error al ejecutar la instrucción';
    
END;
    RETURN 
'OK';
END IF;
END
  #6 (permalink)  
Antiguo 27/05/2009, 08: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: Funcion que ingresa, consulta y vuelve a ingresar

De nada
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
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:51.