Avatar billede shjdsi Nybegynder
09. april 2003 - 14:38 Der er 10 kommentarer og
1 løsning

loop i select statement i sqlplus

Hej kan følgende lade sig gøre

jeg har denne select statement

select state from Queue
        where id =14136960;

hvor jeg selecter på et id i tabellen Queue
imidlertid er antallet af id jeg skal søge på dynamisk og for ikke at lave 56 select statements kunne det være godt hvis jeg kunne lave et loop,

while id < 5 etc....
select state from Queue where id=$id
loop

Jeg ved ikke om det kan lade sig gøre
Avatar billede pgroen Nybegynder
09. april 2003 - 14:51 #1
Ikke helt forstået...

Er du ude efter sådan noget som:

select state from Queue
        where id =14136960
          and rownum <= 5
Avatar billede venne Nybegynder
09. april 2003 - 14:58 #2
Eller er det noget med:

select state
from Queue
where id in (1,2,3,4,5)

/venne
Avatar billede shjdsi Nybegynder
09. april 2003 - 15:03 #3
hmmm jeg kan sagtens bruge venne´s, så han for point, det var fordi jeg ville lave alle checks etc. i sqlplus i stedet for i shell, men så skal jeg ind på plsql ting kan jeg se på det hele. Så jeg holder mig til mit lille script og takker for forslag.
Avatar billede shjdsi Nybegynder
09. april 2003 - 15:03 #4
venne læg lige et svar pgroen du får også lige lidt for dit indlæg
Avatar billede pgroen Nybegynder
09. april 2003 - 15:07 #5
- Eller for nu at generalisere lidt på vennes forslag :-) :

select state
from Queue
where id <= 5
Avatar billede shjdsi Nybegynder
09. april 2003 - 15:12 #6
Ja jo hmmmm, meeeen :-) De idér jeg selecter på er ikke i rækkefølge så jeg kan ikke bruge >=

min tankegang var faktisk at initalisere et array med de idér jeg skal bruge status fra, for derefter at loope gennem dette array i min select statement. Men der er et alternativ med at bruge where id in()..... Denne in clause skal man b are ikke anvende hvis det er et stort resultatet eller hvis man ikke har indexeret sit felt. Den tager vist nok mange resouirser fra databasen.
Avatar billede pgroen Nybegynder
09. april 2003 - 15:31 #7
OK.

Så laver du en tabel:

CREATE table mine_ideer (id NUMBER);
CREATE INDEX mine_ideer ON mine_ideer (id);

indsætter nogle data:

INSERT INTO mine_ideer (id) values (1);
INSERT INTO mine_ideer (id) values (2);
INSERT INTO mine_ideer (id) values (3);
INSERT INTO mine_ideer (id) values (4);
INSERT INTO mine_ideer (id) values (5);

og select'er:

select q.state
from Queue q, mine_ideer m
q.id = m.id;
Avatar billede pgroen Nybegynder
09. april 2003 - 15:34 #8
Hov, der smuttede lige et WHERE:

SELECT q.state
FROM Queue q, mine_ideer m
WHERE q.id = m.id;
Avatar billede venne Nybegynder
09. april 2003 - 15:39 #9
"...hvis man ikke har indexeret sit felt..."

Jaja, men id er vel indexeret???
Ellers er pgroen's forslag også en mulighed. Det hele kommer an på hvilken form din liste af interesante id'er har. Hvis id'erne kommer fra en anden select så bør de jo bare bruges direkte i et join.

/venne
Avatar billede shjdsi Nybegynder
09. april 2003 - 15:42 #10
Tak for input og forslag, jeg vil arbjde videre på mit lille script :-)
Avatar billede shjdsi Nybegynder
09. april 2003 - 15:43 #11
hmm Det gik selvfølgelig galt.

Venne jeg ligger lige et nyt spgs. så du kan få point.
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