webForumDet fria alternativet

Kan man nästla en sekvens?

3 svar · 418 visningar · startad av PollyJuice

PollyJuiceMedlem sedan mars 2006124 inlägg
#1

Jag jobbar med en databas i Oracle Application Express och försöker skapa en sekvens som skapar ett nytt customerid för varje ny kund som läggs in i databasen.
I och med att databasen redan existerade när jag fick ta över den, så finns det 5 testpersoner inlagda redan, med customerid som inte följer varann i någon logisk ordning (23, 43, 119, 120, 123), och därför hade jag tänkt börja sekvensen på 124 - MEN: för att impa lite på min lärare och rädda mitt betyg, tänkte jag försöka hitta ett sätt att skriva

SELECT max(customerid)+1 AS mci FROM customer;
CREATE SEQUENCE customerid START WITH mci INCREMENT BY 1;

men då stöter jag på problem. Går det inte att lägga in något annat än ett numerärt värde i START WITH? Hade hoppats kunna nästla lite och lägga översta kodrade n inom parenteser efter START WITH, men då gnäller den över "invalid number" och felkod ORA-01722.

Iom att jag VET att högsta numret är 123, så KAN jag visserligen bara skriva START WITH 124, men jag skulle gärna vilja lära mig att söka rätt på maxnumret och öka på det, om nu detta går.

SPiNMedlem sedan mars 20007 896 inlägg
#2

Det beror antagligen på att du skapar två frågor, där den andra frågan (CREATE SEQUENCE...) inte vet vad värdet på mci är - då variabeln inte existerar i aktuell fråga.

Försök istället med:

CREATE SEQUENCE customerid START WITH (SELECT MAX(customerid)+1 FROM customer) INCREMENT BY 1
PollyJuiceMedlem sedan mars 2006124 inlägg
#3

ORA-01722 invalid number...

(Skippade första raden, den var bara för att kolla att den begrep max(customerid)+1)

Peter SMedlem sedan dec. 20025 483 inlägg
#4

Testa att först tilldela en variabel maxvärdet och sedan använda variabeln i create sequence-uttrycket.

128 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)