Hej Dejan
Vedr. Sequencer.
CURRVAL = sidste brugte værdi fx. i.f. autonummerer.
NEXTVAL = næste ledige værdi fx. i.f. autonummerer.
Dvs. at du kan ikke benytte dig af 'NEXTVAL' til at få det næste nr. i en liste med mindre at det altså er det du ønsker 'næste ledige værdi'.
En måde hvorpå du kan spole frem og tilbage i det RecordSet du får efter et kald til en DB via JDBC, er:
ResultSet rs = stmt.execute ("SELE.......");
rs.first(); // første element i RecordSet'et
rs.previous(); forrige element i RecordSet'et
rs.next(); næste element i RecordSet'et
rs.last(); sidste element i RecordSet'et
/René
"def" skrev d. 16-05-01 00:54 dette indlæg :
> Ok, nu fandt jeg ud af noget:
> Hvis jeg vil se den aktuelle værdi så er komandoen:
> SELECT kundenr.CURRVAL FROM DUAL;
> (man kan også skrive:
> select * from (select kundenr from kunde)
> where kundenr > ( select (max(kundenr)-1) from kunde);)
>
> og næste værdi fås med:
> SELECT kundenr.NEXTVAL FROM DUAL;
>
> Simpelt nok, meeen, det er vel ikke meningen at alt skal fungere fint.
> Når jeg "inserter" værdierne (samt kundenr.nextval) så er alt fint nok.
> værdierne bliver indsat fint (første,anden.tredje, fjerde). Når jeg afprøver
> er alt fint:
> SELECT kundenr,kundenavn FROM kunde;
>
> kundenr kundenavn
> --------- -----------
> 2 anden
> 3 tredje
> 4 fjerde
> 1 første
>
> og både nextval og currval viser det rigtige. Men når jeg så efter "SELECT
> kundenr.NEXTVAL FROM DUAL" indsætter nye værdier
> f.eks femte og sjette kunde, og så kører:
> SELECT kundenr, kundenavn FROM kunde;
> får jeg:
>
> kundenr kundenavn
> ---------- ------------
> 2 anden
> 3 tredje
> 4 fjerde
> 6 femte (??????????)
> 7 sjette
> 1 første
>
> Dvs efter jeg har kørt NEXTVAL FROM DUAL så sker der noget.
> Jeg har prøvet at bruge:
> ALTER SEQUENCE kundenr NOCACHE;
> SELECT kundenr.NEXTVAL FROM DUAL;
> ALTER SEQUENCE kundenr CACHE;
>
> men det giver samme resultat.
>
> Jeg skal nævne at alt fungerer fint hvis jeg "spørger"
> SELECT kundenr.CURRVAL FROM DUAL;
> Det er kun i tilfælde af "nextval" at den "hopper over"
>
> Er der nogen der ved hvorfor og hvordan kan det ordnes?
>
> mvh Dejan
>
>
> "def" <spades@worldonline.dk> skrev i en meddelelse
> news:I9hM6.12109$zv2.1600714@news010.worldonline.dk...
> > Hej, jeg skal lave et program i Java (JDBC) og en database (Oracle). Nu er
> > jeg lidt "ny" hvad DB angår og derfor disse spørgsmål:
> > Jeg har 3 tabeller (faktur, kunde,vare); Faktur- tabel har en primær nøgle
> > (fakturnr) og en fremmed nøgle (kundenr). Kunde-tabel har en primær nøgle
> > (kundenr). Vare-tabel har en primær nøgle (varenr). Endvidere har jeg
> > oprettet en relation (id) hvis primære nøgle er (fakturnr, varenr), og
> disse
> > 2 attributer er samtidigt fremmednøgler (hver for sig) som hermed
> > "forbinder" faktur-tabel og vare-tabel. Dvs. faktur-tabel og kunde-tabel
> er
> > forbundet via en fremmednøgle, kundenr, ("usynlig" relation), og
> > faktur-tabel og vare-tabel er forbundet via en id-tabel (relation) som
> > består af to fremmednøgler (fakturnr, varenr).
> > I forbindelse med disse tabeller har jeg oprettet 3
> > Sequencer(fakturnr,kundenr,varenr) idet alle primære nøgler i alle 3
> > tabeller skal kunne autonummereres. Og det fungerer fint. Men nu har jeg
> > flere problemer:
> > 1. når jeg starter programmet så skal det gerne vise "faktur nr." i et
> felt.
> > Men for at kunne se de rigtige oplysninger så skal jeg spørge databasen om
> > en bestemt kollones næste værdi. Hvordan gør jeg det. Er der noget der
> > hedder "Select fakturnr.NEXT from faktur"?
> >
> > 2. Faktur-tabel og kunde-tabel: når jeg indsætter værdierne i kunde-tabel
> så
> > bruger jeg:
> > INSERT INTO kunde VALUES (kundenr.NEXTVAL,'mitnavn', 'mitefternavn'...);
> > men når jeg så skal indsætte værdierne i faktur-tabel så skal jeg "kende"
> > NEXTVAL i kunde-tabel idet denne er fremmednøgle i faktur-tabel. Hvordan
> > finder jeg ud af hvad sidste værdi i en kollone er (vist noget med LAST)?
> > Kan man skrive noget i stillen med:
> > INSERT INTO faktur VALUES(fakturnr.NEXTVAL, LAST-VALUE-FROM-KUNDE, .....)?
> >
> > eller kan det bare gøres via JDBC?
> >
> > på forhånd tak
> >
> > mvh Dejan
> >
> >
> >
> >
> >
>
>
--
Leveret af:
http://www.kandu.dk/
"Vejen til en hurtig løsning"