Toon posts:

[SQL] Berekenen van gegevens in een trigger. (Oracle9i2)

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi,

Ik heb een probleem waar ik niet uit kom.
Ik heb een trigger maar de deze is niet geheel juist.
Ik gebruik de waardes xmin, ymax maar eigelijk moet ik andere waardes
hebben en deze zijn te brekenen.
xmin,xmax,ymin,ymax zijn waardes in een tabel.

ik wil voor de eerste waarde waarvoor ik nu xmin heb staan de volgende
formule gebruiken : (xmax - xmin) / 2
En voor de tweede waarde waarvoor ik nu ymax heb staan de volgende
formule gebruiken : (ymax - ymin) / 2
met ":new.xmin" haal ik de xmin waarde op.
Maar hoe ik een deze formule moet bereken met een nieuwe variable weet ik niet.

Wie kan mij hierbij helpen.
Ik zal ook zo de hele trigger posten dan zien jullie
wat er nu precies gebeurt.

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:52
Ik snap niet wat je bedoelt.

Je kan toch in je trigger een variable declareren, waar je dan de uitkomst van die formule aan toekent?

https://fgheysels.github.io/


Verwijderd

Topicstarter
create or replace trigger catalog_mapinfo_trigger
before insert OR UPDATE
on catalog_admin.catalog_mapinfo
for each row

declare
l_status varchar2(200);
l_geometry_type varchar2(200);
l_geometry mdsys.sdo_geometry;

begin

l_geometry := mdsys.sdo_geometry(2003,8307,mdsys.sdo_point_type(:new.xmin,:new.ymax,NULL),mdsys.sdo_elem_info_array(1,1003,1),
mdsys.sdo_ordinate_array(:new.xmin,:new.ymin,:new.xmax,:new.ymin,:new.xmax,:new.ymax,:new.xmin,:new.ymax,:new.xmin,:new.ymin));

:new.geoloc := l_geometry;

EXCEPTION
when others
THEN :new.geoloc := null;
end;

Verwijderd

Topicstarter
Hierboven heb ik mijn trigger gepost.
Bij mdsys.sdo_poit_type zie je dat tussen haakjes :new.xmin,:new.ymax staat
hievoor moeten de nieuwe variablen komen te staan.

kan ik deze ook als een double defineren
of heb ik alleen declare nodig
en wordt het zoiets als :

declare xfiets
declare yfiets

xfiets = (:new.xmax - :new.xmin) / 2
yfiets = (:new.ymax - :new.ymin) / 2

mdsys.sdo_point_type(xfiets,yfiets,NULL)

Verwijderd

Topicstarter
ik heb nu dit geprobeerd (toegevoegd aan trigger).

declare (niet toegevoegd)

xmid number(5,8);
ymid number(5,8);

xmid := ((:new.xmax - :new.xmin) / 2)
ymid := ((:new.ymax - :new.ymin) / 2)

mdsys.sdo_point_type(xmid,ymid,NULL)


Alleen geeft hij bij ymid een foutmelding hier dus bij regel 2.
hij geeft de fout melding:

PLS-00103: Encountered the symbol "YMID" when expecting
one of the following : *; % (enz)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 19-05 21:24

NMe

Quia Ego Sic Dico.

Probeer je toewijzingen eens af te sluiten met een puntkomma. Dit heet nou debuggen, Oracle vertelt het je zelfs, dat je een ; mist. :X

[ Voor 7% gewijzigd door NMe op 29-09-2004 15:56 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Een number(5,8) kan helemaal niet, 5 posities met 8 posities achter de komma.
Verder heb je een exception handler die alle fouten negeert.
Voor je probleem heb je geen andere variabelen nodig, die formule kun je zo in de aanroep gebruiken.

Who is John Galt?


Verwijderd

Topicstarter
He bedankt,

Door jullie reacties heb ik nu mijn trigger werkend gekregen.
Als er iemand nog behoefte heeft aan de source moet zich ff melden
dan post ik hem nog hier.

Groeten,
Tasker
Pagina: 1