19. februar 2003 - 09:37Der er
3 kommentarer og 1 løsning
Trigger problem
Jeg har en oracle server (8.1.6) på Linux (RH 6.2) som hver gang jeg genstarter maskinen laver rod i en sequence som levere primary key id til en tabel [ create sequence order_main_seq
create or replace trigger order_main_trig before insert on order_main for each row begin select order_main_seq.nextVal into :new.orderid from dual; end order_main_trig; ] problemet er at den orderid bruges i ISO 9002 og SKAL være fortløbende, ihvertfald indtil vi får ændret ISO manualerne. Men hvorfor sker det?? -Jeg kalder IKKE den sequence fra andre triggers, og det sker KUN hvis jeg genstarter maskinen???
Din sequence har en default cache på 20 - så vidt jeg husker. Dertil kommer, at du formentlig ikke lukker database ordenligt når du lukker systemet for boot?? Du kan evt. sætte cachen på sequence'n til 1, MEN du kan ikke undgå et spring, hvis transaktionen af en eller anden årsag rulles tilbage. Sekvens nummeret er i så fald under alle omstændigheder tabt.
hornuff HAR ret, men hans pointe om tilbagerullede transaktioner er endnu vigtigere i dit tilfælde. Hvis en transkaktion fejler eller simpelhent bare annulleres af brugeren er sequencen allerede trukket et nummer længere hen i tallene og kommer IKKE tilbage ved rollback! Som udgangspunkt er hovedreglen i Oracle; brug ALDRIG sequence til talrækker UDEN huller!!!!!
-Suk, så blev jeg så meget klogere... Tak, det vil utvivlsomt spare mig en masse tid i fremtiden. Heldigvis har management besluttet at ændre den måde man opretter en ordre på så jeg alligevel kommer til at lave nogle ændringer, så det her er ikke et stort problem. Bare sært at jeg aldrig har set det før???
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.