Einzelnen Beitrag anzeigen

Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#1

[oracle] fehler bei "auto-increment" mit trigger &

  Alt 22. Aug 2008, 08:26
Datenbank: oracle • Version: 9.x • Zugriff über: AnyDAC, Version 1.12.2
guten morgen erst mal,

ich bin in letzter zeit auf ein merkwürdiges phenomän in der oracle datenbank gestoßen. kurz zur erläuterung des sachverhalts: und zwar habe ich zwei tabellen, tbl1 und tbl2. bei der ersten tabelle suche ich mir meine id selbst - immer jeweils den nächst höheren wert - , d.h. ich lasse die id nicht automatisch von der datenbank vergeben. bei tbl2 habe ich ein "auto-increment" eingerichtet. ich habe auf die schnelle hier eine beispiel dazu im internet gefunden: link.

hier aber auch noch meni verwendeter code für trigger und sequenz:
SQL-Code:
-- Sequence
CREATE SEQUENCE seqTest MINVALUE 1

-- Trigger
CREATE OR REPLACE TRIGGER trigTest
  BEFORE
    INSERT
  ON tblTest
  FOR EACH ROW
begin
  select seqTest.nextval into :new.id from dual;
end;
nun ist das folgende passiert: ein anwender hat sich über die reihenfolge der datensätze beschwert, da diese nicht in gewöhnlicher reihenfolge angezeigt wurde. dies habe ich nicht wirklich verstanden, da diese ja eigentlich nach der id von tbl2 sortiert angezeigt werden sollten. nach einiger zeit bin ich auf das folgend gestoßen:
SQL-Code:
-- SQL
SELECT vid, id
FROM elz_laufzettel
WHERE vid = 1457
   OR vid = 1458
   OR vid = 1459
ORDER BY vid

-- Ausgabe
VID ID
---------------------- ----------------------
1457 5978
1457 5979
1458 5575
1458 5576
1458 5577
1458 5578
1458 5579
1458 5580
1458 5980
1458 5573
1458 5574
1459 5584
1459 5585
1459 5586
1459 5587
1459 5582
1459 5581
1459 5583
die vid ist die id aus tbl1 und die id ist die id aus tbl2. rein theoretisch, und genau das ist es was ich nicht verstehe, müssten die ids ja auch immer größer werden und nicht variieren, wie sie wollen. das problem dabei ist dass das ja nicht immer der fall ist und ich komme absolut nicht drauf warum das so passiert. ich bin da grad leicht überfragt, warum der trigger was falsch machen sollte

ps: ich ändere die id von tbl2 sonst nirgends! sie wird nur beim insert gesetzt und dient sonst nur zur identifikation eines datensatzes.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat