Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
Slettet bruger
25. oktober 2002 - 13:15#1
En select der committer? En select der updater?
Hvad er der galt med
update testtabel set test = test+1; commit; select test from testtabel;
hvis jeg laver en select skal det jeg får ud være value+1 denne nye value skal så være det der står i tabellen næste gang jeg select'er, jeg syntes bare jeg har hørt at der skulle være en måde at gøre det på så ikke jeg skal lave 3 kald til basen (select, update, commit)
Synes godt om
Slettet bruger
25. oktober 2002 - 13:24#3
Kan du huske noget om konteksten? Hvorfor skulle man gøre det?
Det kunne måske være noget med at have en trigger, der fyrede på en AFTER SELECT.
Kan du ikke bruge en sequence, den har automatisk aldrig samme værdi hvis du bruger select [seqnavn].nextval from dual; Der er dog ikke garanti for ubrudte sekvenser.
Synes godt om
Slettet bruger
25. oktober 2002 - 13:29#6
Tænker du på en SEQUENCE? create sequence my_seq; select my_seq.nextval;
Synes godt om
Slettet bruger
25. oktober 2002 - 13:33#7
Det skulle være select my_seq.nextval from dual; ikke select my_seq.nextval;
og
CREATE SEQUENCE my_seq INCREMENT BY 1 START WITH 0 MINVALUE 0 MAXVALUE 999999999999999999999999999 NOCYCLE ORDER NOCACHE /
for at garantere ordning også på tværs af sessioner
ved at der bliver comitet i det du selecter vil det altid være den comitede value du bruger, men det er kun dette script jeg laver nu der skal lave denne update, de andre skal bare select'e. og hente data.
Synes godt om
Slettet bruger
25. oktober 2002 - 13:52#12
Hvis de andre bare skal selecte, har du selvfølgelig ikke noget problem.
jeg har lavet denne: DECLARE v_group_value integer; v_group_incemented integer; BEGIN SELECT gv.GROUP_VALUE INTO v_group_value FROM doc_master dm, doc_groups dg, group_specs gs, group_values gv WHERE dg.pub_key = dm.pub_key AND dg.GROUP_ID = gs.GROUP_ID AND dg.GROUP_ID = 'POE' AND dm.pub_num = 'POETEST';
v_group_value := v_group_value+1;
UPDATE group_values SET group_value = v_group_value WHERE group_id = 'POE';
Brug en SEQUENCE. Så erstatter du den første select med mange joins med en simpel select. Dette er MEGET hurtigere og også mere stabilt mht. samtidige opdateringer. DECLARE v_group_value integer; BEGIN SELECT seq_group.nextval INTO v_group_value FROM dual
UPDATE group_values SET group_value = v_group_value WHERE group_id = 'POE';
Jeg har ikke lige læst det igennem men i har sikket alle ret..... har i får lidt hver... Lukker
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.