Avatar billede falslev Nybegynder
05. august 2003 - 14:08 Der er 10 kommentarer og
1 løsning

auto increment i tabel

Hvordan sætter man id i en tabel op til at auto_increment (selv regne id ud)
Databasen er en 9.0
Avatar billede psv Nybegynder
05. august 2003 - 14:12 #1
1) lav en sequence der starter med eks. 1 og tæller 1 op.
2) lav en trigger på tabellen der ved inserts sætter dit !"auto inc" felt til den næste værdi i triggeren.
Avatar billede psv Nybegynder
05. august 2003 - 14:23 #2
create table test (
  id    number(9),
  navn  varchar2(50));
 
create sequence testSEQ increment by 1 start with 1 nomaxvalue nocycle cache 20;
 
create or replace trigger TestTrig
  before insert on Test
  for each row
  begin
    select testseq.nextval
    into :New.Id
    from dual;
  end; 
 
  insert into test (navn) values ('Et navn')

  insert into test (navn) values ('Et andet navn')
 
select * from test 
 
commit;
Avatar billede psv Nybegynder
05. august 2003 - 14:24 #3
Så vil Id feltet aut blive tildelt enfortløbende værdi!
Avatar billede teepee Nybegynder
05. august 2003 - 17:20 #4
Du skal dog være opmærksom på, at der opstår huller i sekvensen ved genstart af databasen og ved rollbacks, men hvis det ikke er et problem, er ovenstående løsningen. Ellers må du ud i en procedure, der låser en række i en tabel og trækker et "nummer", og frigiver rækken igen....
Avatar billede psv Nybegynder
05. august 2003 - 18:21 #5
Dvs. du vil holde låsen indtil commit? :-)
Avatar billede teepee Nybegynder
06. august 2003 - 11:23 #6
Hvis man ikke vil have huller i listen, så kan det blive nødvendigt. Men dette betyder ikke, at der nødvendigvis skal være forsinkelser set fra brugerens synpunkt. Man kan lave noget deferred sjov, der først trækker nummeret, når det hele skal committes. Hvis man så låser rækken og frigiver igen ved samlet commit, så kan det umuligt være mere end et sekund eller to at brugeren skal vente.... selv med rigtigt mange brugere.
Avatar billede psv Nybegynder
06. august 2003 - 11:31 #7
Man kan så diskutere hvorvidt det overhovedet er interessant at have fortløbende ID'er :-)

Jeg undrer mig blot over at falslev ikke vender tilbage? :-)
Avatar billede teepee Nybegynder
06. august 2003 - 11:48 #8
Du har ret psv, det er sjældent nødvendigt med komplette nummersekvenser, og databasen kan alligevel ikke se forskel :-)
Avatar billede psv Nybegynder
06. august 2003 - 11:49 #9
Tjah - og typisk kan der vel også blive slettet fra tabellen igen - og vupti er der huller alligevel :-)
Avatar billede falslev Nybegynder
06. august 2003 - 15:40 #10
PSV du få mine point da det er lige den løsning jeg skulle bruge.
Avatar billede psv Nybegynder
06. august 2003 - 15:52 #11
Cewl :-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester