Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-10-2012
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
llamar procedimiento dentro de otro procedimiento

Hola a todos como están chicos?


Trabajando un poco e tratado de realizar consultas, insert, update con procedimientos Almacenados, leyendo un poco dentro del foro había pensado en realizar dos procedimientos por aparte en firebird 2.5 para una consulta capturando el id y luego otro procedimiento para insertar. pero leyendo un poco me percate que se puede llamar el procedimiento de consulta dentro de un procedimiento para que inserte la consulta lo trate de hacer pero aun no logro correrlo correctamente:

Procedimiento de Consulta:
Código SQL [-]
SET TERM ^ ;

CREATE PROCEDURE CONSULTACEDULA(
  CEDULA VARCHAR(20) CHARACTER SET NONE COLLATE NONE)
RETURNS(
  ID INTEGER)
AS
BEGIN
  /* Procedure body */
  SELECT ID_EMPLEADOS FROM TEMPLEADOS WHERE CEDULA_EMPL =:CEDULA INTO :ID;

END^

SET TERM ; ^

Procedimiento que llama al procedimiento de consulta

Código SQL [-]
CREATE PROCEDURE ADJUNTO(
  ID INTEGER,
  HOJADVIDA CHAR(1) CHARACTER SET NONE COLLATE NONE,
  FOTO CHAR(1) CHARACTER SET NONE COLLATE NONE,
  CED CHAR(1) CHARACTER SET NONE COLLATE NONE,
  TITULOS CHAR(1) CHARACTER SET NONE COLLATE NONE,
  REFERENCIAS CHAR(1) CHARACTER SET NONE COLLATE NONE,
  RP CHAR(1) CHARACTER SET NONE COLLATE NONE,
  EXAM CHAR(1) CHARACTER SET NONE COLLATE NONE)
AS
DECLARE VARIABLE Cedula VARCHAR(20);
DECLARE VARIABLE dd INTEGER;
BEGIN
EXECUTE procedure CONSULTACEDULA(:Cedula) RETURNING_VALUES :dd;
INSERT INTO TADJUNTOSEMPL (ID_EMPLEADOS,HOJADEVIDA,FOTOCARNET,COPIACED,
                           COPIATITULOS,REFERENCIAS,RECORDPOLICIACO,EXAMEMBARAZO)
  VALUES (:dd,:HOJADVIDA,:FOTO,:CEDULA,:TITULOS,:REFERENCIAS,:RP,:EXAM);
  SUSPEND;
END;

Alguien podría orientarme que pasará?

Saludos

novato_erick
Responder Con Cita
  #2  
Antiguo 27-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que te falta el suspend del primero.

Código SQL [-]
CREATE PROCEDURE CONSULTACEDULA( CEDULA VARCHAR(20) )
RETURNS( ID INTEGER ) 
AS
BEGIN
  SELECT ID_EMPLEADOS 
  FROM TEMPLEADOS 
  WHERE CEDULA_EMPL =:CEDULA 
  INTO :ID;
  
  suspend;  /* creo que te falta esto */

END
Responder Con Cita
  #3  
Antiguo 27-10-2012
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
lo extraño es que con el suspend es lo mismo...
cuando ingreso el numero de identificacion me manda este error...


Cita:
Validation error for column ID_EMPLEADOS, value "*** null ***".
At procedure 'ADJUNTO' line: 19, col: 1.


Código SQL [-]
CREATE PROCEDURE ADJUNTO(
  ID INTEGER,
  HOJADVIDA CHAR(1) CHARACTER SET NONE COLLATE NONE,
  FOTO CHAR(1) CHARACTER SET NONE COLLATE NONE,
  CED CHAR(1) CHARACTER SET NONE COLLATE NONE,
  TITULOS CHAR(1) CHARACTER SET NONE COLLATE NONE,
  REFERENCIAS CHAR(1) CHARACTER SET NONE COLLATE NONE,
  RP CHAR(1) CHARACTER SET NONE COLLATE NONE,
  EXAM CHAR(1) CHARACTER SET NONE COLLATE NONE)
AS
DECLARE VARIABLE Cedula VARCHAR(20);
DECLARE VARIABLE dd INTEGER;
BEGIN
EXECUTE procedure CONSULTACEDULA(:Cedula) RETURNING_VALUES :dd;
INSERT INTO TADJUNTOSEMPL (ID_EMPLEADOS,HOJADEVIDA,FOTOCARNET,COPIACED,
                           COPIATITULOS,REFERENCIAS,RECORDPOLICIACO,EXAMEMBARAZO)
  VALUES (:dd,:HOJADVIDA,:FOTO,:CEDULA,:TITULOS,:REFERENCIAS,:RP,:EXAM); /* el parametro dd no aparece lo extraño que cuando*/
  SUSPEND;                    /* lo ejecuto me trae parametro ID que no lo he puesto en ningun lado pero si esta en el procedimiento de consulta.*/    
END^

creo que el parametro dd debe ser el que trae el id del retorno del procedimiento de consulta...



Saludos

Última edición por Casimiro Notevi fecha: 27-10-2012 a las 20:33:12.
Responder Con Cita
  #4  
Antiguo 27-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Pero consultacedula devuelve algo?, ¿lo has probado?
Responder Con Cita
  #5  
Antiguo 27-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por cierto, le sobra el "dos puntos" a dd
EXECUTE procedure CONSULTACEDULA(:Cedula) RETURNING_VALUES :dd;
EXECUTE procedure CONSULTACEDULA(:Cedula) RETURNING_VALUES dd;
Responder Con Cita
  #6  
Antiguo 27-10-2012
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Si lo he probado y solamente ejecutando el de consulta no hay problema se me ocurria talvez haciendo esto a ver dime si me equivoco porque tampoco me hace nada:


Código SQL [-]
CREATE PROCEDURE ADJUNTO2(
  ID INTEGER CHARACTER SET NONE COLLATE NONE,
  HOJA_DVIDA CHAR(1) CHARACTER SET NONE COLLATE NONE,
  FOTO CHAR(1) CHARACTER SET NONE COLLATE NONE,
  CED CHAR(1) CHARACTER SET NONE COLLATE NONE,
  TITULOS CHAR(1) CHARACTER SET NONE COLLATE NONE,
  REFERENCIAS CHAR(1) CHARACTER SET NONE COLLATE NONE,
  RP CHAR(1) CHARACTER SET NONE COLLATE NONE,
  EXAM CHAR(1) CHARACTER SET NONE COLLATE NONE)
RETURNS(
  ID_CONSULTA INTEGER)
AS
BEGIN
EXECUTE procedure CONSULTACEDULA(:Cedula) RETURNING_VALUES(:ID_CONSULTA);
  BEGIN
     INSERT INTO TADJUNTOSEMPL (ID_EMPLEADOS,HOJADEVIDA,FOTOCARNET,COPIACED,
                           COPIATITULOS,REFERENCIAS,RECORDPOLICIACO,EXAMEMBARAZO)
  VALUES (:ID_CONSULTA,:HOJA_DVIDA,:FOTO,:CEDULA,:TITULOS,:REFERENCIAS,:RP,:EXAM);
  END
  SUSPEND;
END;

Probe de esa manera pero me manda error.


Saludos
Responder Con Cita
  #7  
Antiguo 27-10-2012
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.042
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bastante difícil es poder ayudar sin ver ni tocar, si además dices cosas como esta:
Cita:
Empezado por novato_erick Ver Mensaje
Probe de esa manera pero me manda error.
Entonces la ayuda se vuelve casi imposible, ¿qué error?
Responder Con Cita
  #8  
Antiguo 27-10-2012
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Poder: 14
novato_erick Va por buen camino
Ok lo deje asi:

Código SQL [-]
CREATE PROCEDURE ADJUNTO(
  ID INTEGER,
  HOJADVIDA CHAR(1) CHARACTER SET NONE COLLATE NONE,
  FOTO CHAR(1) CHARACTER SET NONE COLLATE NONE,
  CED CHAR(1) CHARACTER SET NONE COLLATE NONE,
  TITULOS CHAR(1) CHARACTER SET NONE COLLATE NONE,
  REFERENCIAS CHAR(1) CHARACTER SET NONE COLLATE NONE,
  RP CHAR(1) CHARACTER SET NONE COLLATE NONE,
  EXAM CHAR(1) CHARACTER SET NONE COLLATE NONE)
AS
DECLARE VARIABLE Cedula VARCHAR(20);
DECLARE VARIABLE dd INTEGER;
BEGIN
EXECUTE procedure CONSULTACEDULA(:Cedula) RETURNING_VALUES dd;
INSERT INTO TADJUNTOSEMPL (ID_EMPLEADOS,HOJADEVIDA,FOTOCARNET,COPIACED,
                           COPIATITULOS,REFERENCIAS,RECORDPOLICIACO,EXAMEMBARAZO)
  VALUES (:dd,:HOJADVIDA,:FOTO,:CEDULA,:TITULOS,:REFERENCIAS,:RP,:EXAM);
  SUSPEND;
END^

Pero me manda este error:

Cita:
Validation error for column ID_EMPLEADOS, value "*** null ***".
At procedure 'ADJUNTO' line: 19, col: 1.
en mi db si existe ese empleado con esa identificacion

pero me manda ese error...

Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Llamar un procedimiento desde otro martini002 Varios 2 02-06-2012 05:58:12
condicionar un procedimiento dentro de otro procedimiento yossi Varios 7 17-05-2010 10:47:14
procedimiento dentro de procedimiento chechu Varios 6 24-11-2005 23:34:48
Ayuda, como llamar a un procedimiento desde otro procedimiento? Ariatna Varios 1 01-02-2005 04:05:35
llamar procedimiento cmgenny Varios 2 12-08-2003 00:28:13


La franja horaria es GMT +2. Ahora son las 01:18:49.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi