Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   SP en otro SP con cursores (https://www.clubdelphi.com/foros/showthread.php?t=31253)

Juanito-Kun 03-05-2006 17:14:43

SP en otro SP con cursores
 
Que tal saludos, estoy trabajando con Delphi 7 y Firebird 1.5.;)

Tengo 2 Stored procedure, el primero me devulve los dias de x tabla, ese tiene que llamar a el procedure 2 que hace ciertas operaciones con los dias que devuelve el procedure 1.

primer procedure que da los dias:

Código SQL [-]
CREATE PROCEDURE HORARIO_DIA_PLAZA (
    CVEDEPPZA VARCHAR (15) CHARACTER SET ISO8859_1)

AS
DECLARE VARIABLE VSQL VARCHAR(100);
DECLARE VARIABLE RDIAHORPZA INTEGER;
DECLARE VARIABLE RCVECATPER VARCHAR (15);
BEGIN
  /* Procedure body */
 for select distinct H.DIAHORPZA, PZ.CVECATPER
   from TBLHORPZA H, DETDEPPZA PZ
   where  H.CVEDEPPZA  = :CVEDEPPZA and
          H.CVEDEPPZA  = PZ.CVEDEPPZA and
          PZ.STADEPPZA = 1
        
   into
   :RDIAHORPZA,:RCVECATPER
 do
 begin
 
  execute statement  'execute procedure horario_no_checada('||'''CESADM014'||''''||','||2||')';
/*Aqui es donde no estoy seguro si se esta usando bien el execute statement*/
/*Use constantes (CESADM014,2) pero deben de ir las variables :RCVECATPER, :RDIAHORPZA respectivamente*/
  
 end
  SUSPEND;
END


Este es el segundo stored procedure:

Código SQL [-]
CREATE PROCEDURE HORARIO_NO_CHECADA (
    CVECATPER VARCHAR (15) CHARACTER SET ISO8859_1,
    DIA INTEGER)
AS
DECLARE VARIABLE VNChecada integer;
DECLARE VARIABLE VDia   integer;
DECLARE VARIABLE RDIAHORPZA INTEGER;
DECLARE VARIABLE RHORHORPZA TIME;
DECLARE VARIABLE RTURHORPZA INTEGER;
DECLARE VARIABLE RNUMHORPZA INTEGER;
DECLARE VARIABLE RIDEHORPZA INTEGER;

BEGIN
VNChecada=1;
  /* Procedure body */
 for  select  H.DIAHORPZA, H.HORHORPZA,
              H.TURHORPZA, H.NUMHORPZA, H.IDEHORPZA
   from TBLHORPZA H, DETDEPPZA PZ
   where PZ.CVECATPER = :CVECATPER  and
         H.CVEDEPPZA = PZ.CVEDEPPZA and
         PZ.STADEPPZA = 1           and
         H.DIAHORPZA = :DIA
   Order by H.DIAHORPZA, HORHORPZA, TPOHORPZA DESC,H.CVEDEPPZA
   into
    RDIAHORPZA,RHORHORPZA,RTURHORPZA,RNUMHORPZA,RIDEHORPZA
  do
   begin

    Update tblhorpza set
    NUMHORPZA=:VNChecada
    where IDEHORPZA=:RIDEHORPZA;
    VNChecada=VNChecada + 1 ;

   end
    suspend;
END


--------

El segundo procedure de acuerdo a los dias que me arroja el primero hace unas operaciones por medio del cursor.

Los dos dicen estar bien en sintaxis, me marca el siguiente error al correr el primero:

Código:

Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements message length error  (encountered 0, expected 40)
En el primer procedimiento estoy usando el execute statement
.

Cambie los Stored procedure, lo que hice fue poner los valores de retorno como simples variables. pero sigo sin resolver el problema, me sale el mismo error..

No entiendo muy bien a que se refiere el mensaje :(.. saludos!

Gracias, espero que me puedan ayudar.

Juanito-Kun 04-05-2006 17:11:04

SP dentro de Otro SP con cursores , Listo!
 
El primer Procedure queda :

Código SQL [-]
CREATE PROCEDURE HORARIO_DIA_PLAZA (
    CVEDEPPZA VARCHAR (15) CHARACTER SET ISO8859_1)
AS
DECLARE VARIABLE VSQL VARCHAR(100);
DECLARE VARIABLE VDIAHORPZA INTEGER;
DECLARE VARIABLE VCVECATPER VARCHAR (15);
BEGIN
  /* Procedure body */
 for select distinct H.DIAHORPZA, PZ.CVECATPER
   from TBLHORPZA H, DETDEPPZA PZ
   where  H.CVEDEPPZA  = :CVEDEPPZA and
          H.CVEDEPPZA  = PZ.CVEDEPPZA and
          PZ.STADEPPZA = 1
   into
   :VDIAHORPZA,:VCVECATPER
 do
  execute procedure horario_no_checada(:VCVECATPER, :VDIAHORPZA);
  SUSPEND;
END

El segundo:

Código SQL [-]
CREATE PROCEDURE HORARIO_NO_CHECADA (
    CVECATPER VARCHAR (15) CHARACTER SET ISO8859_1,
    DIA INTEGER)
AS

DECLARE VARIABLE VNChecada integer;
DECLARE VARIABLE VDia   integer;
DECLARE VARIABLE VDIAHORPZA Integer;
DECLARE VARIABLE VHORHORPZA TIME;
DECLARE VARIABLE VTURHORPZA INTEGER;
DECLARE VARIABLE VNUMHORPZA INTEGER;
DECLARE VARIABLE VIDEHORPZA INTEGER;

BEGIN
VNChecada=1;

  /* Procedure body */
 for  select  H.DIAHORPZA, H.HORHORPZA,
              H.TURHORPZA, H.NUMHORPZA, H.IDEHORPZA
   from TBLHORPZA H, DETDEPPZA PZ
   where PZ.CVECATPER = :CVECATPER  and
         H.CVEDEPPZA = PZ.CVEDEPPZA and
         PZ.STADEPPZA = 1           and
         H.DIAHORPZA = :DIA
   Order by H.DIAHORPZA, HORHORPZA, TPOHORPZA DESC,H.CVEDEPPZA
   into
    VDIAHORPZA,VHORHORPZA,VTURHORPZA,VNUMHORPZA,VIDEHORPZA
  do
   begin

    Update tblhorpza set
    NUMHORPZA=:VNChecada
    where IDEHORPZA=:VIDEHORPZA;
    VNChecada=VNChecada + 1 ;

   end
    suspend;
  /*Aqui termina el procedimiento de calcular el numero de checada*/
END


Los valores que retornan los puse como varibles, les cambie el nombre por comodidad :).

Saludos!! espero que les sirva...


La franja horaria es GMT +2. Ahora son las 05:38:49.

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