Toon posts:

[PLSQL] in array

Pagina: 1
Acties:

Verwijderd

Topicstarter
Vraagje,
het volgende wil ik doen in een oracle pl/sql omgeving.

ik heb een procedure waar een array als variable heen wordt gestuurd (p_wanted_resp). Dit heeft een aantal ID's in zich. Nu heb ik in de zelfde procedure een cursor die me alle mogelijke ID's geeft (r_resp_details).

Nu wil ik door de cursor heen lopen om te kijken of een van de waarden van cursor r_resp_id voorkomt in de array p_wanted_resp.

een beetje op deze manier:
code:
1
2
3
4
5
6
7
8
9
 FOR r_resp_details IN c_resp_details
 LOOP
     IF r_resp_details.responsibility_id in (p_wanted_resp)
     THEN      
   
              doe blablablablablabla

     END IF;
 END LOOP;


Echter als ik dit wil compilen dan krijg ik de volgende error melding:
PLS-00383: Type mismatch found in 'R_RESP_DETAILS.RESPONSIBILITY' inside an IN or NOT in clause.

Iemand enig idee wat er mis is met de code of iemand die een andere manier heeft om dit aan te pakken?

  • mkleinman
  • Registratie: Oktober 2001
  • Nu online

mkleinman

8kWp, WPB, ELGA 6

Zo ff een vraag. Hoe heb je p_wanted_resp exact gedefinieerd ?

Op de manier die je nu gebruikt gaat het volgens mij zowiezo niet werken voor zover ik weet. Ik heb ff met PLSQL Developer gekeken naar wat voorbeelden die ik eerder heb gemaakt .

Vandaar dat ik nieuwsgierig ben naar de exacte definitie van p_wanted_resp

[ Voor 70% gewijzigd door mkleinman op 29-06-2006 12:54 ]

Duurzame nerd. Veel comfort en weinig verbruiken. Zuinig aan doen voor de toekomst.


Verwijderd

Topicstarter
mkleinman64 schreef op donderdag 29 juni 2006 @ 12:49:
Zo ff een vraag. Hoe heb je p_wanted_resp exact gedefinieerd ?

Op de manier die je nu gebruikt gaat het volgens mij zowiezo niet werken voor zover ik weet. Ik heb ff met PLSQL Developer gekeken naar wat voorbeelden die ik eerder heb gemaakt .

Vandaar dat ik nieuwsgierig ben naar de exacte definitie van p_wanted_resp
Ik haal hem binnen met:
p_wanted_resp IN CUSTOM.CHECK_UPDATE_SETTINGS.array

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

De quick and dirty manier (als je waarden integers zijn) is de waarde als index van je PL/SQL tabel gebruiken en dan met .exists afvragen. Als je een nieuwe database hebt kun je ook andere datatypen als index gebruiken.
De nette manier is een nested table definieren en deze joinen met je tabel middels een cast.

Who is John Galt?


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Je kunt toch gewoon dit doen:
code:
1
2
3
4
5
6
7
8
FOR r_resp_details IN c_resp_details LOOP
     FOR p_id in p_wanted_resp LOOP
        IF p_id = r_resp_details.responsibility_id
              doe blablablablablabla
              EXIT;
        END IF;
     END LOOP;
END LOOP;