Converter essa trigger para Oracle

Oracle

03/09/2012

Galera... estou precisando de um grande favor..
Estou precisando gerar essa trigger de DB2 no Oracle.. alguem pode me ajudar?

CREATE TRIGGER PRODDTA.TRG_F4301_AU001
NO CASCADE BEFORE
UPDATE OF
PHMCU
ON PRODDTA.F4301
REFERENCING
NEW AS NEWREG
FOR EACH ROW
MODE DB2SQL
WHEN ((NEWREG.PHDCTO='QM'))
BEGIN ATOMIC
DECLARE V_LTTR CHAR(6);
DECLARE V_NXTR CHAR(6);
SET V_LTTR=(
SELECT LTRIM(RTRIM(PDLTTR))
FROM PRODDTA.F4311
WHERE PDKCOO=NEWREG.PHKCOO
AND PDDOCO=NEWREG.PHDOCO
AND PDDCTO=NEWREG.PHDCTO
AND PDSFXO=NEWREG.PHSFXO);
SET V_NXTR=(
SELECT LTRIM(RTRIM(PDNXTR))
FROM PRODDTA.F4311
WHERE PDKCOO=NEWREG.PHKCOO
AND PDDOCO=NEWREG.PHDOCO
AND PDDCTO=NEWREG.PHDCTO
AND PDSFXO=NEWREG.PHSFXO);
IF (V_LTTR<>'980')
AND (V_NXTR<>'999') THEN
SET NEWREG.PHMCU=
CASE
WHEN SUBSTR(PHVR02,1,1) = '1'
THEN SPACE(09) || '110'
WHEN SUBSTR(PHVR02,1,1) <> '1'
THEN SPACE(09) || '10' || SUBSTR(NEWREG.PHVR02,1,1)
END;
SET NEWREG.PHUSER=(
SELECT PDUSER
FROM PRODDTA.F4311
WHERE PDDOCO=NEWREG.PHDOCO
AND PDDCTO='QM');
SET NEWREG.PHPID=(
SELECT PDPID
FROM PRODDTA.F4311
WHERE PDDOCO=NEWREG.PHDOCO
AND PDDCTO='QM');
SET NEWREG.PHOTOT = (
SELECT HMABTU+HMACMT+HMACPP
FROM PRODDTA.F5949300
WHERE HMN001=decimal(NEWREG.PHVR01)
AND HMROUT=NEWREG.PHVR02
AND HMTRDT=NEWREG.PHDRQJ);
END IF;
END;

COMMENT ON TRIGGER PRODDTA.TRG_F4301_AU001
IS 'TRIGGER CRIADA PARA RESOLVER PROBLEMA EM COMPRAS';

Se alguem puder me ajudar fico muito agradecido.

Valeu.

[]s
Emerson Paula

Emerson Paula

Curtidas 0

Respostas

Celso Frias

Celso Frias

03/09/2012

JDE... ainda está com o problema?
GOSTEI 0
Eliézio Mesquita

Eliézio Mesquita

03/09/2012

EMERSON NEI DE PAULA

Já foi resolvido o problema da sua trigger, se SIM coloque o post como concluído se NÂO explica qual é função dessa trigger atualmente no seu banco DB2.

abraço e obrigado!
GOSTEI 0
Emerson Paula

Emerson Paula

03/09/2012

Opa.. como estao.
Não foi resolvido ainda, encontrei alguns programas que convertem essas triggers, vou testar, e qualquer coisa retorno aqui no forum.
Valeu.
GOSTEI 0
Deivison Melo

Deivison Melo

03/09/2012

A estrutura da tabela está igual no oracle?
GOSTEI 0
Emerson Paula

Emerson Paula

03/09/2012

A estrutura da tabela está igual no oracle?


Fala Deivison

Exatamente igual.
Valeu
GOSTEI 0
Deivison Melo

Deivison Melo

03/09/2012

seria mais ou menos isso (fica complicado criar uma trigger sem a estrutura de tabelas em nossa base) veja se isso ajuda:

/*(inicio) Trigger*/
create or replace trigger proddta.trg_f4301_au001
before update of phmcu
on proddta.f4301
referencing
new as new
old as old
for each row
declare

cursor c1 is
select ltrim(rtrim(pdlttr)) pdlttr
from proddta.f4311
where pdkcoo=newreg.phkcoo
and pddoco=newreg.phdoco
and pddcto=newreg.phdcto
and pdsfxo=newreg.phsfxo;

cursor c2 is
select ltrim(rtrim(pdnxtr)) pdnxtr
from proddta.f4311
where pdkcoo=newreg.phkcoo
and pddoco=newreg.phdoco
and pddcto=newreg.phdcto
and pdsfxo=newreg.phsfxo;

cursor c3 is
select pduser
from proddta.f4311
where pddoco=newreg.phdoco
and upper(pddcto)=upper('qm');


cursor c4 is
select pdpid
from proddta.f4311
where pddoco=newreg.phdoco
and upper(pddcto)=upper('qm');

cursor c5 is
select hmabtu+hmacmt+hmacpp
from proddta.f5949300
where hmn001=newreg.phvr01 -- se precisar de conversao aqui usar to_char ou to_number
and hmrout=newreg.phvr02
and hmtrdt=newreg.phdrqj;

cursor c6 is
select decode(substr(newreg.phvr02,1,1),1,'110','10'||substr(newreg.phvr02,1,1)) valor
from newreg;

vc1 c1%rowtype;
vc2 c2%rowtype;
vc3 c3%rowtype;
vc4 c4%rowtype;
vc5 c5%rowtype;
vc6 c6%rowtype;

begin
open c1;
fetch c1 into vc1;
close c1;

open c2;
fetch c2 into vc2;
close c2;

open c2;
fetch c2 into vc2;
close c2;

open c3;
fetch c3 into vc3;
close c3;

open c4;
fetch c4 into vc4;
close c4;

open c5;
fetch c5 into vc5;
close c5;


if nvl(vc1.pdlttr,0) <> '980' and nvl(vc2.pdnxtr,0) <>'999' then
open c6;
fetch c6 into vc6;
close c6;

-- retorno do cursor: vc6.valor
Dbms_Output.Put_Line('Valor cursor 06: '||vc6.valor);
-- Não fiz nada com o valor por não saber o que vc quer com ele
end if;

--os demais cursores já foram abertos acima então pode trabalhar com as variaveis dele


exception
when others then
raise_application_error(-20999,'erro: '||sqlerrm);
end;
/*(Fim) Trigger*/



Bom espero ter ajudado, qualquer dúvida estou à disposição!

Atenciosamente,

Emanoel Deivison
GOSTEI 0
Deivison Melo

Deivison Melo

03/09/2012

Cuidado com trigger mutanting no oracle...
GOSTEI 0
Deivison Melo

Deivison Melo

03/09/2012

Verificou se o código enviado atendeu suas expectativas...
GOSTEI 0
Emerson Paula

Emerson Paula

03/09/2012

Verificou se o código enviado atendeu suas expectativas...


Opa.. então passei para a equipe responsável... creio que hoje ainda eles me retornam.. e respondo aqui no forum.\
Valeu
GOSTEI 0
Emerson Paula

Emerson Paula

03/09/2012

Verificou se o código enviado atendeu suas expectativas...


Opa.. então passei para a equipe responsável... creio que hoje ainda eles me retornam.. e respondo aqui no forum.\
Valeu


Fala galera... passei para o pessoal responsável.. e até o momento ninguém respondeu... logo vou usar a técnica do quem cala consente...
Valeu pela ajuda de todos.

Abraços
GOSTEI 0
Deivison Melo

Deivison Melo

03/09/2012

Ok, espero ter ajudado!

Qualquer anormalidade por favor me comunicar!

Forte abraço e bons códigos!!!
GOSTEI 0
POSTAR