Rumah > pangkalan data > tutorial mysql > Bagaimanakah Saya Boleh Membahagikan Rentetan kepada Berbilang Baris dengan Cekap dalam Oracle?

Bagaimanakah Saya Boleh Membahagikan Rentetan kepada Berbilang Baris dengan Cekap dalam Oracle?

Susan Sarandon
Lepaskan: 2025-01-22 17:42:10
asal
104 orang telah melayarinya

How Can I Efficiently Split Strings into Multiple Rows in Oracle?

Mengendalikan Pemisahan Rentetan menjadi Berbilang Baris dalam Pangkalan Data Oracle dengan cekap

Operasi pangkalan data selalunya memerlukan pemisahan rentetan ke dalam baris individu. Oracle menawarkan kaedah yang berkesan, terutamanya dalam versi 10g dan lebih baru, untuk mengurus tugas ini.

Kaedah Asas Menggunakan Ungkapan Biasa

Teknik yang ringkas tetapi berkuasa menggunakan ungkapan biasa dan klausa connect by. Ini melibatkan membina jadual sementara dan menggunakan fungsi ungkapan biasa untuk mengekstrak subrentetan:

<code class="language-sql">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;</code>
Salin selepas log masuk

Memahami Kod

  1. temp CTE (Ungkapan Jadual Biasa) mensimulasikan data sampel.
  2. length(regexp_replace(t.error, '[^,] ')) 1 menentukan bilangan ralat dengan mengira nilai yang dipisahkan koma.
  3. select level from dual connect by level <= ... menjana urutan nombor dari 1 hingga kiraan ralat.
  4. table(cast(multiset(...) as sys.OdciNumberList)) menukar urutan nombor menjadi koleksi yang boleh digunakan.
  5. Gabungan silang menggabungkan temp dengan koleksi nombor, mewujudkan semua gabungan yang diperlukan.
  6. trim(regexp_substr(t.error, '[^,] ', 1, levels.column_value)) mengekstrak setiap ralat menggunakan nombor yang dijana sebagai penunjuk kedudukan.

Kaedah ini memisahkan rentetan dengan berbilang nilai dengan cekap ke dalam baris yang berasingan sambil mengekalkan integriti data.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membahagikan Rentetan kepada Berbilang Baris dengan Cekap dalam Oracle?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan