Ini mungkin cara yang lebih baik (juga dengan regexp dan connect by):
with temp as
(
select 108 Name, 'test' Project, 'Err1, Err2, Err3' Error from dual
union all
select 109, 'test2', 'Err1' from dual
)
select distinct
t.name, t.project,
trim(regexp_substr(t.error, '[^,]+', 1, levels.column_value)) as error
from
temp t,
table(cast(multiset(select level from dual connect by level <= length (regexp_replace(t.error, '[^,]+')) + 1) as sys.OdciNumberList)) levels
order by name
EDIT :Ini adalah penjelasan sederhana (seperti dalam, "tidak mendalam") dari kueri.
length (regexp_replace(t.error, '[^,]+')) + 1
menggunakanregexp_replace
untuk menghapus apa pun yang bukan pembatas (dalam hal ini koma) danlength +1
untuk mendapatkan berapa banyak elemen (kesalahan) yang ada.-
select level from dual connect by level <= (...)
menggunakan kueri hierarki untuk membuat kolom dengan peningkatan jumlah kecocokan yang ditemukan, dari 1 hingga jumlah total kesalahan.Pratinjau:
select level, length (regexp_replace('Err1, Err2, Err3', '[^,]+')) + 1 as max from dual connect by level <= length (regexp_replace('Err1, Err2, Err3', '[^,]+')) + 1
table(cast(multiset(.....) as sys.OdciNumberList))
melakukan beberapa casting tipe oracle.- Pemeran
cast(multiset(.....)) as sys.OdciNumberList
mengubah beberapa koleksi (satu koleksi untuk setiap baris dalam kumpulan data asli) menjadi satu kumpulan angka, OdciNumberList. table()
fungsi mengubah koleksi menjadi hasil.
- Pemeran
-
FROM
tanpa gabungan akan membuat gabung silang antara set data Anda dan multiset. Akibatnya, satu baris dalam set data dengan 4 kecocokan akan berulang 4 kali (dengan angka yang meningkat di kolom bernama "column_value").Pratinjau:
select * from temp t, table(cast(multiset(select level from dual connect by level <= length (regexp_replace(t.error, '[^,]+')) + 1) as sys.OdciNumberList)) levels
trim(regexp_substr(t.error, '[^,]+', 1, levels.column_value))
menggunakancolumn_value
sebagai nth_appearance/ocurrence parameter untukregexp_substr
.- Anda dapat menambahkan beberapa kolom lain dari kumpulan data Anda (
t.name, t.project
sebagai contoh) untuk visualisasi yang mudah.
Beberapa referensi ke dokumen Oracle:
- REGEXP_REPLACE
- REGEXP_SUBSTR
- Konstanta, Jenis, dan Pemetaan Ekstensibilitas (OdciNumberList)
- CAST (multiset)
- Kueri Hirarki