Triggers
Sabes tengo un triggers que no me compila, no se que hacer, lo reviso y no encuentro el error quiera enviartelo para que solo mires el codigo si esta bien escrito muchas gracias
TRIGGER "SONDAJES".mod_t_lycumo
AFTER INSERT OR UPDATE OR DELETE
ON T_LYCUMO
FOR EACH ROW
DECLARE
CURSOR lista_sonda (cyac NUMBER,clab CHAR) IS
SELECT *
FROM t_identi
WHERE yacimiento=cyac
AND codlabor=clab
ORDER BY CODLABOR;
CURSOR lista_trayec(cyac NUMBER, clab CHAR) IS
SELECT *
FROM t_trayec
WHERE (yacimiento = cyac ) AND
(codlabor = clab);
CURSOR lista_lycumo(cyac NUMBER, clab CHAR, metini NUMBER, metfin NUMBER) IS
SELECT *
FROM t_lycumo
WHERE (yacimiento = cyac ) AND
(codlabor = clab) AND
(metfinal>metini AND metfinal<=metfin);
l_s lista_sonda%ROWTYPE;
l_t lista_trayec%ROWTYPE;
l_cu lista_lycumo%ROWTYPE;
metini NUMBER;
metfin NUMBER;
metant NUMBER;
x0 NUMBER;
y0 NUMBER;
z0 NUMBER;
x1 NUMBER;
y1 NUMBER;
z1 NUMBER;
xm NUMBER;
ym NUMBER;
zm NUMBER;
rumb NUMBER;
incl NUMBER;
codigo_yac NUMBER;
codigo_labor VARCHAR2(8);
gr NUMBER;
ind NUMBER;
BEGIN
if (inserting) then
codigo_yac:=:new.yacimiento;
codigo_labor:=:new.codlabor;
end if;
if (updating) then
codigo_yac:=:new.yacimiento;
codigo_labor:=:new.codlabor;
DELETE FROM L_LYCUMO_COORD
WHERE yacimiento=:new.yacimiento AND codlabor=:new.codlabor;
end if;
if (deleting) then
codigo_yac:=:old.yacimiento;
codigo_labor:=:old.codlabor;
DELETE FROM L_LYCUMO_COORD
WHERE yacimiento=:old.yacimiento AND codlabor=:old.codlabor;
end if;
/*INICIO*/
gr:=3.14159265359/180.0;
OPEN lista_sonda(codigo_yac,codigo_labor);
LOOP
FETCH lista_sonda INTO l_s;
EXIT WHEN lista_sonda%NOTFOUND;
metini:=0;
x0:=l_s.longitud;
y0:=l_s.latitud;
z0:=l_s.cota;
OPEN lista_trayec(l_s.yacimiento,l_s.codlabor);
LOOP
FETCH lista_trayec INTO l_t;
EXIT WHEN lista_trayec%NOTFOUND;
metfin:=l_t.metfinal;
IF metfin>0 THEN
rumb:=gr*(l_t.azigrd+l_t.azimin/60+l_t.aziseg/3600);
IF l_t.incgrd>0 THEN
incl:=gr*(l_t.incgrd+l_t.incmin/60+l_t.incseg/3600);
ELSE
incl:=gr*(l_t.incgrd-l_t.incmin/60-l_t.incseg/3600);
END IF;
metant:=metini;
ind:=0;
OPEN lista_lycumo(l_t.yacimiento,l_t.codlabor,metini,metfin);
LOOP
FETCH lista_lycumo INTO l_cu;
EXIT WHEN lista_lycumo%NOTFOUND;
xm:=x0+(l_cu.metfinal+metant)/2*sin(rumb)*cos(incl);
ym:=y0+(l_cu.metfinal+metant)/2*cos(rumb)*cos(incl);
zm:=z0+(l_cu.metfinal+metant)/2*sin(incl);
INSERT INTO L_LYCUMO_COORD VALUES (l_s.yacimiento,l_s.codlabor,xm,ym,zm);
metant:=l_cu.metfinal;
ind:=1;
END LOOP;
CLOSE lista_lycumo;
x1:=x0+metfin*sin(rumb)*cos(incl);
y1:=y0+metfin*cos(rumb)*cos(incl);
z1:=z0+metfin*sin(incl);
IF ind<1 THEN
xm:=(x0+x1)/2;
ym:=(y0+y1)/2;
zm:=(z0+z1)/2;
INSERT INTO L_LYCUMO_COORD VALUES (l_s.yacimiento,l_s.codlabor,xm,ym,zm);
END IF;
x0:=x1;
y0:=y1;
z0:=z1;
END IF;
metini:=metfin;
END LOOP;
CLOSE lista_trayec;
commit;
END LOOP;
CLOSE lista_sonda;
/*FIN*/
end mod_t_lycumo;
TRIGGER "SONDAJES".mod_t_lycumo
AFTER INSERT OR UPDATE OR DELETE
ON T_LYCUMO
FOR EACH ROW
DECLARE
CURSOR lista_sonda (cyac NUMBER,clab CHAR) IS
SELECT *
FROM t_identi
WHERE yacimiento=cyac
AND codlabor=clab
ORDER BY CODLABOR;
CURSOR lista_trayec(cyac NUMBER, clab CHAR) IS
SELECT *
FROM t_trayec
WHERE (yacimiento = cyac ) AND
(codlabor = clab);
CURSOR lista_lycumo(cyac NUMBER, clab CHAR, metini NUMBER, metfin NUMBER) IS
SELECT *
FROM t_lycumo
WHERE (yacimiento = cyac ) AND
(codlabor = clab) AND
(metfinal>metini AND metfinal<=metfin);
l_s lista_sonda%ROWTYPE;
l_t lista_trayec%ROWTYPE;
l_cu lista_lycumo%ROWTYPE;
metini NUMBER;
metfin NUMBER;
metant NUMBER;
x0 NUMBER;
y0 NUMBER;
z0 NUMBER;
x1 NUMBER;
y1 NUMBER;
z1 NUMBER;
xm NUMBER;
ym NUMBER;
zm NUMBER;
rumb NUMBER;
incl NUMBER;
codigo_yac NUMBER;
codigo_labor VARCHAR2(8);
gr NUMBER;
ind NUMBER;
BEGIN
if (inserting) then
codigo_yac:=:new.yacimiento;
codigo_labor:=:new.codlabor;
end if;
if (updating) then
codigo_yac:=:new.yacimiento;
codigo_labor:=:new.codlabor;
DELETE FROM L_LYCUMO_COORD
WHERE yacimiento=:new.yacimiento AND codlabor=:new.codlabor;
end if;
if (deleting) then
codigo_yac:=:old.yacimiento;
codigo_labor:=:old.codlabor;
DELETE FROM L_LYCUMO_COORD
WHERE yacimiento=:old.yacimiento AND codlabor=:old.codlabor;
end if;
/*INICIO*/
gr:=3.14159265359/180.0;
OPEN lista_sonda(codigo_yac,codigo_labor);
LOOP
FETCH lista_sonda INTO l_s;
EXIT WHEN lista_sonda%NOTFOUND;
metini:=0;
x0:=l_s.longitud;
y0:=l_s.latitud;
z0:=l_s.cota;
OPEN lista_trayec(l_s.yacimiento,l_s.codlabor);
LOOP
FETCH lista_trayec INTO l_t;
EXIT WHEN lista_trayec%NOTFOUND;
metfin:=l_t.metfinal;
IF metfin>0 THEN
rumb:=gr*(l_t.azigrd+l_t.azimin/60+l_t.aziseg/3600);
IF l_t.incgrd>0 THEN
incl:=gr*(l_t.incgrd+l_t.incmin/60+l_t.incseg/3600);
ELSE
incl:=gr*(l_t.incgrd-l_t.incmin/60-l_t.incseg/3600);
END IF;
metant:=metini;
ind:=0;
OPEN lista_lycumo(l_t.yacimiento,l_t.codlabor,metini,metfin);
LOOP
FETCH lista_lycumo INTO l_cu;
EXIT WHEN lista_lycumo%NOTFOUND;
xm:=x0+(l_cu.metfinal+metant)/2*sin(rumb)*cos(incl);
ym:=y0+(l_cu.metfinal+metant)/2*cos(rumb)*cos(incl);
zm:=z0+(l_cu.metfinal+metant)/2*sin(incl);
INSERT INTO L_LYCUMO_COORD VALUES (l_s.yacimiento,l_s.codlabor,xm,ym,zm);
metant:=l_cu.metfinal;
ind:=1;
END LOOP;
CLOSE lista_lycumo;
x1:=x0+metfin*sin(rumb)*cos(incl);
y1:=y0+metfin*cos(rumb)*cos(incl);
z1:=z0+metfin*sin(incl);
IF ind<1 THEN
xm:=(x0+x1)/2;
ym:=(y0+y1)/2;
zm:=(z0+z1)/2;
INSERT INTO L_LYCUMO_COORD VALUES (l_s.yacimiento,l_s.codlabor,xm,ym,zm);
END IF;
x0:=x1;
y0:=y1;
z0:=z1;
END IF;
metini:=metfin;
END LOOP;
CLOSE lista_trayec;
commit;
END LOOP;
CLOSE lista_sonda;
/*FIN*/
end mod_t_lycumo;
Respuesta de jhiguerey
1