PLSQL hoe de juiste cursor sturen

Pagina: 1
Acties:

  • ErikRo
  • Registratie: Juni 2001
  • Laatst online: 26-08 18:02
Ik had gehoopt met een if..then..endif het zo voor elkaar te krijgen. Dat afhankelijk van een var waarde cursor1 of cursor2 wordt gebruikt.
Nu gebruik ik dus 2 gelijke cursors maar met elk andere (en behoorlijk grote) where voorwaarden. Zoiets als X in (A,B,C,D,E,F,G,H,I,J,K) en de andere X in(L,M,N,O,P,Q,R,S,T,U).
Met het resultaat uit de cursors werk ik dan weer verder.

Heb ik cursor 1 nodig dan maak ik hem nu nog actief door remark tekens (---) weg te halen en bij cursor2 deze juist neer te zetten. Werkt verder prima, maar 5 seconden werk, maar het zou mooier/netter zijn ik bij "DECLARE"
v_cursor1 boolean default true;
Kon neerzetten om deze eventueel via een &vraag op false te zetten.


IF v_cursor1 = true
THEN cursor1;
ELSE cursor2;
END IF;
Bovenstaande werkte dus niet, maar if..then..else voor cursors leek me al wat vreemd :) Maar ik kan even geen andere oplossing bedenken. Iemand anders een idee?

"I don't have any solution but I certainly admire the problem." -- Ashleigh Brilliant


  • ErikRo
  • Registratie: Juni 2001
  • Laatst online: 26-08 18:02
Kom op jongens er zitten hier toch nog wel een paar PLSQL specialisten :)

"I don't have any solution but I certainly admire the problem." -- Ashleigh Brilliant


  • whoami
  • Registratie: December 2000
  • Nu online
Niet zo snel kicken.... Geef de mensen eens wat tijd.
Mocht je ook eens een duidelijker topic openen (duidelijkere vraag en omschrijving van uw probleem), dan zou je misschien ook sneller een antwoord op uw vraag krijgen.

https://fgheysels.github.io/


  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

Zoals whoami al zegt het zou beter zijn geweest als je een duidelijke titel had gebruikt.

Als suggestie heb ik: [PL/SQL] Hoe keuze maken uit meerder cursoren?? o.i.d.

Maar als ik jou goed begrijp wil jij dat op basis van een variabele een keuze maken tussen de ene cursor en de andere :? Dat moet toch niet zo moeilijk zijn?? Als je het mij vraagt moet het ook bijna zoals jij hebt beschreven. Ik zou het zo doen:
code:
1
2
3
4
5
IF v_cursor1 = true THEN
    OPEN cursor1;
ELSE
    OPEN cursor2;
END IF;


Ook kan je hier natuurlijk FETCH INTO gebruiken, maar ik weet niet echt wat je wilt, dus ik kan hier wel suggesties blijven geven, maar daar schiet ik niets mee op en dat is alleen maar zonde van mijn tijd :P

Want straks zeg je nog dat je eigenlijk gebruik had willen maken van REF CURSOR(en)

offtopic:
Het ziet er trouwens ook naar uit dat je weinig tot geen ervaring hebt met het programeren in PL/SQL. Wellicht zou het toch eens handig zijn als je een goed boek cq. cursusje gaat volgen

  • ErikRo
  • Registratie: Juni 2001
  • Laatst online: 26-08 18:02
Ik probeerde de topic aan de passen aan de hand van jouw suggestie, hoe duidelijker hoe beter tenslotte, helaas niet gelukt.

Je begreep me trouwens precies goed, dat was namelijk precies wat ik wilde.
Ik heb 2 dus (bijna) dezelfde cursors op de where na. Ze kunnen elk hun gegevens naar een plsqltabel schrijven.

CURSOR c_a IS SELECT a, b, c, d FROM e WHERE x in (A,B,C,D,E,F,G,H,I,J,K)
CURSOR c_a IS SELECT a, b, c, d FROM e WHERE x in (L,M,N,O,P,Q,R,S,T,U).

Verderop in het script worden alleen maar cursor loops gebruikt om met de gegevens in de plsqltabel te werken. Dit leek mij handiger dan steeds open/close cursor.

Cursor1 schrijft de ene helft naar de plsqltabel en cursor 2 het restant (wordt meestal een paar dagen later gebruikt).
Nu zoek ik nog iets om een keuze te kunnen maken tussen die twee, liefst zonder het hele script overhoop te halen.

Sorry dat mijn vorige bericht zo slecht te begrijpen was. Ik had wel geprobeerd het zo duidelijk mogelijk te maken, maar het resultaat weten we :(

"I don't have any solution but I certainly admire the problem." -- Ashleigh Brilliant


  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

ErikRo schreef op 17 september 2002 @ 15:44:
Ik probeerde de topic aan de passen aan de hand van jouw suggestie, hoe duidelijker hoe beter tenslotte, helaas niet gelukt.
Geeft niet :) Want ik begreep jou toch goed :9
Je begreep me trouwens precies goed, dat was namelijk precies wat ik wilde.

[...]

Nu zoek ik nog iets om een keuze te kunnen maken tussen die twee, liefst zonder het hele script overhoop te halen.
Dit wat jij wilt gaat niet lukken. Want jij wilt dus op basis van een boolean een keuze maken tussen een bepaalde cursor welke later wordt gebruikt in een LOOP. Ik denk dat je dit toch op een andere manier moet gaan oplossen. Wellicht kan je je cursor aanpassen dat op basis van een input variabele je een andere WHERE IN clausule krijgt.

Klik hier voor een PL/SQL tutorial

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Kun je niet op basis van je variabele één query maken. Bijvoorbeeld zoiets:

code:
1
2
3
4
SELECT a, b, c, d
FROM e
WHERE (v_cursor1 = true or x in (A,B,C,D,E,F,G,H,I,J,K))
AND (v_cursor1 = false or x in (L,M,N,O,P,Q,R,S,T,U))


Kweet niet precies of dit mogelijk is in PLSQL, maar het is ook slechts een hint.

Never underestimate the power of


  • ErikRo
  • Registratie: Juni 2001
  • Laatst online: 26-08 18:02
Woudloper schreef op 18 september 2002 @ 10:08:
Dit wat jij wilt gaat niet lukken. Want jij wilt dus op basis van een boolean een keuze maken tussen een bepaalde cursor welke later wordt gebruikt in een LOOP. Ik denk dat je dit toch op een andere manier moet gaan oplossen. Wellicht kan je je cursor aanpassen dat op basis van een input variabele je een andere WHERE IN clausule krijgt.

Klik hier voor een PL/SQL tutorial
Ik was er al een beetje bang voor :) Die where zat ik ook aan te denken, maar dat wordt relatief veel werk cq opnieuw testen, voor relatief weinig winst.
Ik was namelijk net klaar met het script, maar net niet tevreden met dat stukje hierboven.
Het werkt nu ook, het is alleen niet mooi :)

btw bedankt voor je linkje altijd nuttig om daar ook eens te kijken om extra kennis op te doen.
Heb je toevallig ook een linkje van een gespecialiseerd NL plsql forum?

btw2 Voordat iedereen met cursussen komt aandragen :)
Alhoewel ik in het niets val met de kennis cq ervaring van sommige plsql'ers hier.
Heb ik ondertussen 1 boek over SQL (kan ik dromen) en 2 boeken over PLSQL verslonden en ben ondertussen alweer een maandje lekker aan het stoeien/knoeien met PLSQL.
Zelfs vorige week mijn scriptje afgerond waarin ondertussen alles verwerkt zit waarvan ik ooit wilde of zelfs maar hoopte dat ik het ooit voor elkaar zou krijgen.
Dat is helemaal niets voor een beetje programmeur dat weet ik zelf ook wel, maar ik hoopte toch ondertussen wel het newbie stadium ontgroeid te zijn :)

"I don't have any solution but I certainly admire the problem." -- Ashleigh Brilliant


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Kan gewoon hoor.
Kijk maar in een boek/tutorial oid bij "ref cursors".

Who is John Galt?


  • ErikRo
  • Registratie: Juni 2001
  • Laatst online: 26-08 18:02
Ik moet helaas bekennen dat ik de term niet ken, maar ik ga meteen zoeken.

"I don't have any solution but I certainly admire the problem." -- Ashleigh Brilliant


  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Overigens hoef je je cursor niet expliciet te declareren, maar kun je 'em ook via een string variabele aan je open statement voeren, dat is is dit geval misschien nog wel makkelijker.
Dan krijg je iets als:
code:
1
2
3
4
5
6
7
8
if v_choose = 1
then
  v_cursor := "select xxx...";
else
  v_cursor := "select yyy...";
end if;
...
open c_test for v_cursor;

Who is John Galt?

Pagina: 1