PDA

Ver la Versión Completa : Como puedo actualizar una tabla con procedimientos


subzero
29-01-2004, 16:37:53
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,

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.



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,

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