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)
-   -   Como puedo actualizar una tabla con procedimientos (https://www.clubdelphi.com/foros/showthread.php?t=6987)

subzero 29-01-2004 16:37:53

Como puedo actualizar una tabla con procedimientos
 
Tengo la siguiente consulta que debe actulizar una tabla después de haber ejecutado dos consultas posteriormente, la primera es para ubicar los campos que serán comparados con la segunda, y la segunda para hacer la actualización.

SET TERM ^;

CREATE PROCEDURE ACTUA_ANEXO1
AS
DECLARE VARIABLE COD_DANE VARCHAR(12);
DECLARE VARIABLE COD_DANE2 VARCHAR(12);
DECLARE VARIABLE JORNADA VARCHAR(1);
BEGIN
FOR SELECT CODIGO_DANE FROM TEMP_ANEXO1_1
INTO :COD_DANE DO
BEGIN
FOR SELECT I.INS_CODIGO, J.JOR_COD_R166
FROM INSTITUCION I, PERFIL_EDUCATIVO PE, GRADO_ESPECIALIDAD GE, GRUPO G, JORNADA J
WHERE I.INS_CODIGO_DANE=:COD_DANE
AND I.INS_ID=PE.INS_ID
AND PE.PER_EDU_ID=GE.PER_EDU_ID
AND GE.GRA_ESP_ID=G.GRA_ESP_ID
AND G.JOR_ID=J.JOR_ID
GROUP BY I.INS_CODIGO_DANE, J.JOR_COD_R166
INTO :COD_DANE2,:JORNADA DO
IF(JORNADA='1')THEN
BEGIN
UPDATE TEMP_ANEXO1_1
SET JOR_COMPLETA='S'
WHERE CODIGO_DANE=:COD_DANE2
END
IF(JORNADA='2')THEN
BEGIN
UPDATE TEMP_ANEXO1_1
SET JOR_MANNANA='S'
WHERE CODIGO_DANE=:COD_DANE2
END
IF(JORNADA='3')THEN
BEGIN
UPDATE TEMP_ANEXO1_1
SET JOR_TARDE='S'
WHERE CODIGO_DANE=:COD_DANE2
END
IF(JORNADA='4')THEN
BEGIN
UPDATE TEMP_ANEXO1_1
SET JOR_NOCTURNA='S'
WHERE CODIGO_DANE=:COD_DANE2
END
IF(JORNADA='5')THEN
BEGIN
UPDATE TEMP_ANEXO1_1
SET JOR_FINSEMANA='S'
WHERE CODIGO_DANE=:COD_DANE2
END
END
END^

SET TERM;^


El error que me arroja es:
"Dynamic SQL Error
SQL error code = -104
Token unknown - line 24, char 9
END
"

Que estoy haciendo mal???, agradesco a quien me pueda ayudar

kinobi 29-01-2004 16:52:58

Hola,

Cita:

Empezado por subzero
Que estoy haciendo mal???

dos cosas:

1. En tu mensaje: no utilizar la etiqueta CODE para formatear el código del procedimiento almacenado que has puesto y que así sea más fácil poder leerlo. Aquí tienes información sobre el tema: http://www.clubdelphi.com/foros/misc.php?do=bbcode#code

2. En cuanto al código, no estoy seguro (ya que ahora no puedo probarlo), pero creo que te faltan los ; (punto y coma) de cierre de sentencias.

Cita:

Empezado por subzero
Código:

          IF(JORNADA='1')THEN
          BEGIN
            UPDATE TEMP_ANEXO1_1
            SET JOR_COMPLETA='S'
            WHERE CODIGO_DANE=:COD_DANE2 ;
          END


Saludos

subzero 29-01-2004 18:14:19

:) Gracias por la ayuda, aquí pongo el código como ejemplo para próximas dudas.
hacia falta un end y los ";"

Nuevamente Gracias.

SET TERM ^;

CREATE PROCEDURE ACTUA_ANEXO1
AS
DECLARE VARIABLE COD_DANE VARCHAR(12);
DECLARE VARIABLE COD_DANE2 VARCHAR(12);
DECLARE VARIABLE JORND VARCHAR(1);
BEGIN
FOR SELECT CODIGO_DANE FROM TEMP_ANEXO1_1 INTO :COD_DANE DO
BEGIN FOR SELECT I.INS_CODIGO_DANE, J.JOR_COD_R166 FROM INSTITUCION I, PERFIL_EDUCATIVO PE, GRADO_ESPECIALIDAD GE, GRUPO G, JORNADA J
WHERE I.INS_CODIGO_DANE=:COD_DANE
AND I.INS_ID=PE.INS_ID
AND PE.PER_EDU_ID=GE.PER_EDU_ID
AND GE.GRA_ESP_ID=G.GRA_ESP_ID
AND G.JOR_ID=J.JOR_ID
GROUP BY I.INS_CODIGO_DANE, J.JOR_COD_R166
INTO :COD_DANE2,:JORND DO
BEGIN
IF(JORND='1')THEN BEGIN
UPDATE TEMP_ANEXO1_1
SET JOR_COMPLETA='S'
WHERE CODIGO_DANE=:COD_DANE2;
END
IF(JORND='2')THEN BEGIN
UPDATE TEMP_ANEXO1_1
SET JOR_MANNANA='S'
WHERE CODIGO_DANE=:COD_DANE2;
END
IF(JORND='3')THEN BEGIN
UPDATE TEMP_ANEXO1_1
SET JOR_TARDE='S'
WHERE CODIGO_DANE=:COD_DANE2;
END
IF(JORND='4')THEN BEGIN
UPDATE TEMP_ANEXO1_1
SET JOR_NOCTURNA='S'
WHERE CODIGO_DANE=:COD_DANE2;
END
IF(JORND='5')THEN BEGIN
UPDATE TEMP_ANEXO1_1
SET JOR_FINSEMANA='S'
WHERE CODIGO_DANE=:COD_DANE2;
END
END
END
SUSPEND;
END^

SET TERM;^


Suerte!.

kinobi 29-01-2004 18:18:42

Hola,

Cita:

Empezado por subzero
Nuevamente Gracias.

Gracias a ti el comentario y por poner el código corregido, pero insisto: echa un vistazo al asunto de la etiqueta CODE: http://www.clubdelphi.com/foros/misc.php?do=bbcode#code

Saludos


La franja horaria es GMT +2. Ahora son las 07:57:47.

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