私はこのような表を持っています。PL/SQLは1行から複数行に分割されます
|PARAMKEY | PARAMVALUE ----------+------------ KEY |[["PAR_A",2,"SCH_A"],["PAR_B",4,"SCH_B"],["PAR_C",3,"SCH_C"]]
私は3つの列に値を分割する必要があると私はREGEXP_SUBSTRを使用しています。ここに私のコードです。
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';
これは私が必要とする結果です。
PARAMETER | VERSION | SCHEMA ---------+---------+------- PAR_A |2 |SCH_A PAR_B |4 |SCH_B PAR_C |3 |SCH_C
は、しかし、値が長すぎると私はsimplierループか何かを使って、それを作るために別の方法があると思います。 おかげ
これを参照してください。 http://stackoverflow.com/documentation/oracle/1968/splitting-delimited-strings –
PARAMVALUE列の長さはどのくらいですか? –
@DmitryGrekov data_typeはclobなので、52行に値を選択する必要があります。 –