Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Oracle/SQL] Sortering op meegegeven IDs

Pagina: 1
Acties:

  • reddevil
  • Registratie: Februari 2001
  • Laatst online: 06-10 14:25
Ik ben aan het werk in Oracle 10 en probeer het volgende probleem op te lossen:

Ik geef aan een stored procedure een comma-separated list van IDs mee (bijvoorbeeld '1,5,4,3') en maak met behulp van dynamisch een select statement die zoiets doet als:

SQL:
1
select id, ... from tbl_test where id in (1,5,4,3)


Dit werkt, alleen geeft Oracle de restultaten terug als 1,3,4,5 ipv wat ik meegeef, dus 1,5,4,3.

Een standaard 'simpele' order by werkt natuurlijk ook niet.

Ik heb op het internet exact hetzelfde probleem gevonden met een oplossing, maar dat is alleen in mysql: http://artur.hefczyc.net/node/3
In Oracle werkt dat helaas niet :'( .

Een oplossing (denk ik) is om een global temporary table te gebruiken waarin ik de IDs in plaats met bijvoorbeeld een 2e kolom waarin een volgnummer zit. Dan een join te doen met de tabel waaruit ik meer data wil halen en dan order by het volgnummer, maar is er ook een eenvoudigere oplossing zoals die bij mysql?

Ik heb wel gezocht op google naar dingen als 'oracle advanced order by', etc, maar of ik kijk er overheen of ik gebruik de verkeerde woorden, want ik kan het niet vinden. Iemand die hier ervaring mee heeft?

  • MacWebber
  • Registratie: September 2000
  • Niet online
Je zou kunnen knutselen met de DECODE functie.

In je applicatie heb je de vier ID's wellicht in een array staan, van daar uit stel je de IN clause samen.
Als je een ORDER BY op de volgende manier samen stelt:

SQL:
1
ORDER BY DECODE(ID, 1, 1, 5, 2, 4, 3, 3, 4)


In de decode staat steeds een ID-pair, de eerste waarde is het daadwerkelijke ID, de tweede is het element nummer in de IN clause (en dus waarschijnlijk in jouw array).

Dan zou de sortering volgens mij goed moeten gaan. Performance technisch is het wellicht niet de meest geweldige oplossing...

Hoop dat 'ie zo duidelijk is...

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Met een truukje kan dit wel:
code:
1
order by instr(','||'1,5,4,3'||',',','||kolom||',')

[ Voor 9% gewijzigd door justmental op 06-03-2008 11:43 ]

Who is John Galt?


  • reddevil
  • Registratie: Februari 2001
  • Laatst online: 06-10 14:25
@MacWebber: Werkt inderdaad, moet ik is even kijken hoe ik dat in elkaar knutsel in plsql, mochten er andere opties zijn, dan hoor ik die ook nog graag 8)

@justmental: werkt ook, en simpeler te maken _/-\o_

[ Voor 18% gewijzigd door reddevil op 06-03-2008 11:48 ]