Jednoduchým řešením jak rozdělit řetězec v Oracle do více řádků je využití možnosti kombinace dotazu nad „tabulkou“ DUAL a využití klauzule CONNECT BY. Vše si ukážeme na jednoduchém příkladu.

[English version – How to select multiple rows from single line using a query over DUAL table]

Představte si, že existuje následující řetězec:

Anna,Martin,Sebastián,Gabriela,Pavel,

Tento řetězec potřebujeme rozdělit tak, aby výsledkem byl seznam jmen, každé jméno v jednom řádku, takto:

Anna
Martin
Sebastián
Gabriela
Pavel

Jak toho dosáhnout (jednoduchým způsobem) ukazuje následující SQL dotaz:

SELECT substr( 'Anna,Martin,Sebastián,Gabriela,Pavel,',
         ( case when rownum = 1
           then 1
           else instr( 'Anna,Martin,Sebastián,Gabriela,Pavel,', ',', 1, rownum - 1 ) + 1 end ),

         instr( substr( 'Anna,Martin,Sebastián,Gabriela,Pavel,',
         		( case when rownum = 1
                  then 1
                  else instr( 'Anna,Martin,Sebastián,Gabriela,Pavel,', ',', 1, rownum - 1 ) + 1 end )
       		), ',' ) - 1

       ) as products
FROM dual
CONNECT BY LEVEL <= length( 'Anna,Martin,Sebastián,Gabriela,Pavel,' )
                  - length ( replace('Anna,Martin,Sebastián,Gabriela,Pavel,', ',') ) ;

Post to Twitter

Leave a comment

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *