Ich habe eine Tabelle wie diese.PL/SQL aufgeteilt in viele Zeilen
|PARAMKEY | PARAMVALUE ----------+------------ KEY |[["PAR_A",2,"SCH_A"],["PAR_B",4,"SCH_B"],["PAR_C",3,"SCH_C"]]
Ich brauche die Werte in drei Spalten aufgeteilt und ich verwende REGEXP_SUBSTR. Hier ist mein Code.
SELECT REGEXP_SUBSTR(paramvalue, '[^],["]+', 1,1) PARAMETER
,REGEXP_SUBSTR(paramvalue, '[^],[",]+', 1, 2) VERSION
,REGEXP_SUBSTR(paramvalue, '[^],["]+', 1, 3) SCHEMA
FROM tmp_param_table
where paramkey = 'KEY'
UNION ALL
SELECT REGEXP_SUBSTR(paramvalue, '[^],["]+', 1, 4) PARAMETER
,REGEXP_SUBSTR(paramvalue, '[^],[",]+', 1, 5) VERSION
,REGEXP_SUBSTR(paramvalue, '[^],["]+', 1, 6) SCHEMA
FROM tmp_param_table
where paramkey = 'KEY'
UNION ALL
SELECT REGEXP_SUBSTR(paramvalue, '[^],["]+', 1, 7) PARAMETER
,REGEXP_SUBSTR(paramvalue, '[^],[",]+', 1, 8) VERSION
,REGEXP_SUBSTR(paramvalue, '[^],["]+', 1, 9) SCHEMA
FROM tmp_param_table
where paramkey = 'KEY';
und das ist das Ergebnis, das ich brauche.
PARAMETER | VERSION | SCHEMA ---------+---------+------- PAR_A |2 |SCH_A PAR_B |4 |SCH_B PAR_C |3 |SCH_C
Aber der Wert ist zu lang und ich hoffe, es ist eine andere Art und Weise es simplier zu machen, indem Schleife oder irgendetwas verwendet wird. Dank
Siehe diese ex. http://stackoverflow.com/documentation/oracle/1968/splitting-delimited-strings –
Wie lange ist die PARAMVALUE Spalte? –
@DmitryGrekov der data_type ist clob und ich muss den Wert in 52 Zeile auswählen. –