Ver Mensaje Individual
  #4  
Antiguo 19-08-2005
lbuelvas lbuelvas is offline
Miembro
 
Registrado: may 2003
Ubicación: Colombia
Posts: 377
Reputación: 22
lbuelvas Va por buen camino
Que tal con un preocedimiento almacenado ?, normalmente evito el tipo de construcciones basados en SQL pues queda un poco dificil determinar el comportamineto y rendimiento, espero te sirva este ejemplo:

Estas son las tablas por favor colocale datos,

Código SQL [-]
CREATE TABLE TABLA_A (
    ID       INTEGER NOT NULL,
    CAMPO_1  INTEGER,
    CAMPO_2  INTEGER,
    CAMPO_3  INTEGER
);

ALTER TABLE TABLA_A ADD CONSTRAINT PK_TABLA_A PRIMARY KEY (ID);

CREATE TABLE TABLA_B (
    ID       INTEGER NOT NULL,
    CAMPO_1  INTEGER,
    CAMPO_2  INTEGER,
    CAMPO_3  INTEGER
);

ALTER TABLE TABLA_B ADD CONSTRAINT PK_TABLA_B PRIMARY KEY (ID);

Este es un procedimiento simple

Código SQL [-]
SET TERM ^ ;

CREATE PROCEDURE SP_ACTUALIZACION 
AS
DECLARE VARIABLE V_ID INTEGER;
DECLARE VARIABLE V_CAMPO_1 INTEGER;
DECLARE VARIABLE V_CAMPO_2 INTEGER;
begin
  /* Procedimiento para actualizar datos desde tabla_b hacia tabla_a, con
     modificacion de mas de un campo. */
  for select id,
             campo_1,
             campo_2
      from tabla_b
      into   :v_id,
             :v_campo_1,
             :v_campo_2
  do begin
    update tabla_a
    set    campo_1 = :v_campo_1,
           campo_2 = :v_campo_2
    where  id = :v_id;
  end
end
^

SET TERM ; ^

y este es un procedimiento con notificacion

Código SQL [-]
SET TERM ^ ;

CREATE PROCEDURE SP_ACTUALIZACION_PLUS 
RETURNS (
    PS_ID INTEGER,
    PS_SALIDA VARCHAR(20))
AS
DECLARE VARIABLE V_CAMPO_1 INTEGER;
DECLARE VARIABLE V_CAMPO_2 INTEGER;
begin
  /* Procedimiento para actualizar datos desde tabla_b hacia tabla_a, con
     modificacion de mas de un campo.
     Se adiciono mejora para indicar el estado de actualizacion, ya que puede
     haber registros en la tabla_b que no se encuentran en la tabla_a.
     Queda de tarea indicar que registros de la tabla_a no estan en tabla_b !
  */
  for select id,
             campo_1,
             campo_2
      from tabla_b
      into   s_id,
             :v_campo_1,
             :v_campo_2
  do begin
    if (exists (select first 1 '*'
                from   tabla_a
                where  id = s_id)) then
    begin
      update tabla_a
      set    campo_1 = :v_campo_1,
             campo_2 = :v_campo_2
      where  id = s_id;
      ps_salida = 'EXISTE';
    end
    else
    begin
      ps_salida = 'NO EXISTE';
    end
    suspend;
  end
end
^

SET TERM ; ^
__________________
Luis Fernando Buelvas T.
Responder Con Cita