"Misbruget" (som Colin 't Hart udtrykte det) af connected by
har et godt formål her:ved at bruge REGEXP_SUBSTR
du kan kun udtrække et af de 4 matches (23,34,45,56):regexet [^,]+
matcher enhver tegnsekvens i strengen, som ikke indeholder et komma.
Hvis du vil prøve at køre:
SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+') as "token"
FROM DUAL
du får 23
.
og hvis du vil prøve at køre:
SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,1) as "token"
FROM DUAL
du får også 23
kun at vi nu også indstiller to yderligere parametre :begynd at kigge i position 1 (som er standard), og returner den første forekomst.
Lad os nu køre:
SELECT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,2) as "token"
FROM DUAL
denne gang får vi 34
(2. forekomst) og ved at bruge 3
da den sidste parameter vil returnere 45
og så videre.
Brugen af rekursiv connected by
sammen med level
sørger for, at du modtager alle relevante resultater (dog ikke nødvendigvis i den oprindelige rækkefølge!):
SELECT DISTINCT REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) as "token"
FROM DUAL
CONNECT BY REGEXP_SUBSTR ('23,34,45,56','[^,]+',1,LEVEL) IS NOT NULL
order by 1
vil returnere:
TOKEN
23
34
45
56
som ikke kun indeholder alle 4 resultater, men også opdeler det i separate rækker i resultatsættet!
Hvis du vil fisle med det - det kan måske give dig et klarere overblik over emnet.