Sp efetuar Update, comparando o Old e New
Caros amigos tenho uma Sp que efetua as alterações na minha tabela terreno
assim:
CREATE PROCEDURE UPDATE_TERRENO(
INDICE INTEGER,
COD_LET INTEGER,
NUMERO VARCHAR(10),
QUADRA VARCHAR(10),
FRENTE NUMERIC(15,2),
TRAS NUMERIC(15,2),
LADO_D NUMERIC(15,2),
LADO_E NUMERIC(15,2),
M2 NUMERIC(15,2),
OBS VARCHAR(60),
NORTE VARCHAR(60),
OESTE VARCHAR(60),
LESTE VARCHAR(60),
SUL VARCHAR(60),
P_NORTE VARCHAR(20),
P_OESTE VARCHAR(20),
P_LESTE VARCHAR(20),
P_SUL VARCHAR(20),
VALOR NUMERIC(15,2),
VLR_DEVIDO NUMERIC(15,2))
AS
begin
BEGIN
UPDATE TERRENOS SET
INDICE=:INDICE,
COD_LET=:COD_LET,
NUMERO=:NUMERO,
QUADRA=:QUADRA,
FRENTE=:FRENTE,
TRAS=:TRAS,
LADO_D=:LADO_D,
LADO_E=:LADO_E,
M2=:M2,
OBS=:OBS,
NORTE=:NORTE,
OESTE=:OESTE,
LESTE=:LESTE,
SUL=:SUL,
P_NORTE=:P_NORTE,
P_OESTE=:P_OESTE,
P_LESTE=:P_LESTE,
P_SUL=:P_SUL,
VALOR=:valor,
VLR_DEVIDO=:VLR_DEVIDO /* aqui preciso do calculo */
WHERE INDICE =:INDICE;
END
end
Na ultima linha VLR_DEVIDO=:VLR_DEVIDO tenho que fazer uma um calculo como em uma trigger
ex: terrenos.VLR_DEVIDO = VLR_DEVIDO + (new.valor - old.valor)
bom parece meio confuso mais só preciso saber o Valor do Campo (valor) antes e depois da Update
se fosse em uma trigger usaria os comandos New e Old,,,,
Grato pela atenção
assim:
CREATE PROCEDURE UPDATE_TERRENO(
INDICE INTEGER,
COD_LET INTEGER,
NUMERO VARCHAR(10),
QUADRA VARCHAR(10),
FRENTE NUMERIC(15,2),
TRAS NUMERIC(15,2),
LADO_D NUMERIC(15,2),
LADO_E NUMERIC(15,2),
M2 NUMERIC(15,2),
OBS VARCHAR(60),
NORTE VARCHAR(60),
OESTE VARCHAR(60),
LESTE VARCHAR(60),
SUL VARCHAR(60),
P_NORTE VARCHAR(20),
P_OESTE VARCHAR(20),
P_LESTE VARCHAR(20),
P_SUL VARCHAR(20),
VALOR NUMERIC(15,2),
VLR_DEVIDO NUMERIC(15,2))
AS
begin
BEGIN
UPDATE TERRENOS SET
INDICE=:INDICE,
COD_LET=:COD_LET,
NUMERO=:NUMERO,
QUADRA=:QUADRA,
FRENTE=:FRENTE,
TRAS=:TRAS,
LADO_D=:LADO_D,
LADO_E=:LADO_E,
M2=:M2,
OBS=:OBS,
NORTE=:NORTE,
OESTE=:OESTE,
LESTE=:LESTE,
SUL=:SUL,
P_NORTE=:P_NORTE,
P_OESTE=:P_OESTE,
P_LESTE=:P_LESTE,
P_SUL=:P_SUL,
VALOR=:valor,
VLR_DEVIDO=:VLR_DEVIDO /* aqui preciso do calculo */
WHERE INDICE =:INDICE;
END
end
Na ultima linha VLR_DEVIDO=:VLR_DEVIDO tenho que fazer uma um calculo como em uma trigger
ex: terrenos.VLR_DEVIDO = VLR_DEVIDO + (new.valor - old.valor)
bom parece meio confuso mais só preciso saber o Valor do Campo (valor) antes e depois da Update
se fosse em uma trigger usaria os comandos New e Old,,,,
Grato pela atenção
Marcos Fernando
Curtidas 0
Respostas
Afarias
04/03/2004
só TRIGGERs possuem o contexto OLD e NEW -- em um procedimento, isto não faz sentido.
Como vc está pegando o valor para fazer a atualização, o valor q vc tem em mãos é o ´NEW´ -- para pegar o ´OLD´ faça um SELECT na tabela *antes* de proceder a atualização::
select valor from tabela where indice=:indice into :old_valor;
T+
Como vc está pegando o valor para fazer a atualização, o valor q vc tem em mãos é o ´NEW´ -- para pegar o ´OLD´ faça um SELECT na tabela *antes* de proceder a atualização::
select valor from tabela where indice=:indice into :old_valor;
T+
GOSTEI 0