Memisahkan Berbilang Nilai Dipisahkan Koma dalam Jadual Oracle kepada Berbilang Baris tanpa Pendua
Apabila berurusan dengan data dalam jadual Oracle, ia selalunya diperlukan untuk membahagikan nilai yang dipisahkan koma kepada berbilang baris. Menggunakan gabungan CONNECT BY dan ungkapan biasa, adalah mungkin untuk mencapai ini. Walau bagaimanapun, adalah penting untuk mengelakkan baris pendua dalam hasil pertanyaan.
Pertanyaan untuk Membahagikan Nilai Dipisahkan Koma
WITH CTE AS ( SELECT 'a,b,c,d,e' temp, 1 slno FROM DUAL UNION SELECT 'f,g' temp, 2 slno FROM DUAL UNION SELECT 'h' temp, 3 slno FROM DUAL ) SELECT TRIM(REGEXP_SUBSTR(temp, '[^,]+', 1, level)), slno FROM CTE CONNECT BY level <= REGEXP_COUNT(temp, '[^,]+') AND PRIOR slno = slno AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL
Penjelasan
Pertanyaan ini menggunakan klausa WITH rekursif untuk mencipta Ungkapan Jadual Biasa (CTE) bernama CTE. CTE terdiri daripada tiga baris data dengan nilai dipisahkan koma.
Pernyataan SELECT utama kemudian mengekstrak nilai individu daripada lajur temp. Fungsi TRIM digunakan untuk mengalih keluar sebarang ruang kosong di hadapan atau di belakang daripada nilai. Fungsi REGEXP_SUBSTR() bertanggungjawab untuk membelah lajur temp kepada nilai berasingan berdasarkan pembatas koma.
Klausa CONNECT BY melakukan pemisahan rekursif. Ia memastikan bahawa setiap nilai yang dipisahkan koma diberikan tahap yang unik. Keadaan PRIOR slno = slno memastikan tahap dinaikkan hanya dalam setiap baris (slno).
Selain itu, keadaan PRIOR DBMS_RANDOM.VALUE IS NOT NULL digunakan untuk mengelakkan baris pendua daripada dijana. DBMS_RANDOM.VALUE ialah pseudocolumn yang mengembalikan nombor rawak. Dengan membandingkannya dengan IS NOT NULL, kami memperkenalkan elemen rawak yang menghapuskan pendua.
Hasil akhir ialah jadual dengan berbilang baris, setiap satu mengandungi nilai tunggal daripada rentetan asal yang dipisahkan koma. Pendekatan ini membahagikan nilai dengan berkesan tanpa menghasilkan sebarang baris pendua.
Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Nilai Dipisahkan Koma dalam Oracle kepada Berbilang Baris Tanpa Pendua?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!