Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-01-2004
subzero subzero is offline
No confirmado
 
Registrado: ene 2004
Ubicación: Móntería - Córdoba - Colombia
Posts: 289
Poder: 0
subzero Va por buen camino
Unhappy 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
Responder Con Cita
  #2  
Antiguo 29-01-2004
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 29-01-2004
subzero subzero is offline
No confirmado
 
Registrado: ene 2004
Ubicación: Móntería - Córdoba - Colombia
Posts: 289
Poder: 0
subzero Va por buen camino
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!.
Responder Con Cita
  #4  
Antiguo 29-01-2004
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
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
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


La franja horaria es GMT +2. Ahora son las 01:56:33.


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