Ver Mensaje Individual
  #3  
Antiguo 16-07-2013
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Reputación: 18
jafera Va por buen camino
Gracias Antonio

He querido retomar un poco el hilo del 2011 en el que al final me querias comprar un velero, jejeje...

Pues como decia antes tengo una tabla nacional origen de los datos con campos varchar excepto un integer campos C1, C2, C3, C4...C14, esta tabla la lleno con datos procedentes de un fichero txt que me envian semanalmente, este tema tambien lo comentamos hace unas semanas y funciona a la perfección, luego tengo una tabla origen autonomica que se llena con el mismo sistema.

Despues debo pasar los datos primero de la tabla nacional a la tabla destino con campos varchar nombre, apellido1, apellido2, etc codigo categoria integer.

Si la tabla destino que es tabla sobre la cual trabajo, tiene datos entrados, pues el stored procedure me los actualiza en un santiamen, pero si el corredor no esta en la tabla ya que es nuevo de esta semana, debo insertarlo.

Ademas una vez hecho esto debo insertar los datos procedentes de las tablas autonomicas que no existan en la tabla principal.

El motivo es que las licencias de corredores las emite la RFEC pero las autonomias, emiten unas licencias validas solo en la región correspondiente para carreras locales, un corredor con licencia autónoma vasca no puede participar en carreras andaluzas, por ejemplo y evidentemente estos datos autonómicos no figuran en las tablas RFEC, por esos se deben añadir.

Aquí mi problema.

No se si se entiende bien el problema, antes yo hacia la actualización con locate y sql y me podia ir a comer mientras el proceso estaba en marcha, una vez implantado el update con procedimeiento almacenado el tiempo de actualización es casi imperceptible de ahí que me gustaría hecer los insert con un sistema parecido.

Este es el codigo del procedure para actualizar:

Código SQL [-]
 
COMMIT WORK;
SET AUTODDL OFF;
SET TERM ^ ;
/* Stored procedures */
CREATE PROCEDURE "ACTUALITZA_REFC" 
AS
BEGIN EXIT; END ^

ALTER PROCEDURE "ACTUALITZA_REFC" 
AS
declare variable DNI VARCHAR(12) CHARACTER SET ISO8859_1;
declare variable LLICENCIA VARCHAR(14) CHARACTER SET ISO8859_1;
declare variable NOM VARCHAR(20) CHARACTER SET ISO8859_1;
declare variable COGNOM1 VARCHAR(25) CHARACTER SET ISO8859_1;
declare variable COGNOM2 VARCHAR(25) CHARACTER SET ISO8859_1;
declare variable CODIUCI VARCHAR(12) CHARACTER SET ISO8859_1;
declare variable CODI_CAT INTEGER;
declare variable CLUB VARCHAR(25) CHARACTER SET ISO8859_1;
declare variable PUBLICITAT VARCHAR(25) CHARACTER SET ISO8859_1;
begin
FOR SELECT C11, C10, C5, C6, C7, C8, C13, C14, C16
      FROM CTR0003E
      INTO :DNI, :LLICENCIA, :NOM, :COGNOM1, :COGNOM2, :CODI_CAT, :CODIUCI, :CLUB, :PUBLICITAT
  DO BEGIN
    UPDATE CTR0003 SET
           LLICENCIA=:LLICENCIA,
           NOM=:NOM,
           COGNOM1=:COGNOM1,
           COGNOM2=:COGNOM2,
           CODIUCI=:CODIUCI,
           CODI_CAT=:CODI_CAT,
           CLUB=:CLUB,
           PUBLICITAT=:PUBLICITAT
    WHERE DNI = :DNI AND CODI_CAT=:CODI_CAT;
  END  
end
 ^
SET TERM ; ^
COMMIT WORK;
SET AUTODDL ON;
Saludos

Última edición por ecfisa fecha: 16-07-2013 a las 18:15:00. Razón: Quitar caritas del código
Responder Con Cita