Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Menggantikan GROUP_CONCAT MySQL dalam Oracle?

Bagaimana untuk Menggantikan GROUP_CONCAT MySQL dalam Oracle?

Barbara Streisand
Lepaskan: 2025-01-15 12:25:44
asal
675 orang telah melayarinya

How to Replace MySQL's GROUP_CONCAT in Oracle?

Setara Oracle dengan GROUP_CONCAT MySQL

Fungsi

MySQL GROUP_CONCAT menggabungkan berbilang baris dengan cekap menjadi satu rentetan. Oracle menawarkan beberapa cara untuk mencapai hasil yang sama, bergantung pada versi pangkalan data anda.

LISTAGG: Kaedah Pilihan (Oracle 11g dan lebih baru)

Fungsi LISTAGG ialah pendekatan yang disyorkan untuk versi Oracle moden (11g dan ke atas). Ia menyediakan penyelesaian yang bersih dan cekap untuk menggabungkan nilai dalam kumpulan:

<code class="language-sql">SELECT
    col1,
    LISTAGG(col2, ', ') WITHIN GROUP (ORDER BY col2) AS names
FROM table_x
GROUP BY col1</code>
Salin selepas log masuk

Pertanyaan ini mengumpulkan baris mengikut col1 dan menggabungkan nilai col2 yang sepadan, dipisahkan dengan koma dan ruang, disusun dengan col2.

Fungsi Tersuai: Untuk Versi Oracle Lama (10g dan lebih awal)

Untuk Oracle 10g dan versi terdahulu yang tidak mempunyai LISTAGG, fungsi tersuai diperlukan:

<code class="language-sql">CREATE OR REPLACE FUNCTION get_concatenated_values (input_val IN NUMBER)
  RETURN VARCHAR2
IS
  concatenated_text VARCHAR2(10000) := NULL;
BEGIN
  FOR x IN (SELECT col2 FROM table_name WHERE col1 = input_val) LOOP
    concatenated_text := concatenated_text || ',' || x.col2;
  END LOOP;
  RETURN LTRIM(concatenated_text, ',');
END;
/</code>
Salin selepas log masuk

Penggunaan:

<code class="language-sql">SELECT col1, get_concatenated_values(col1) FROM table_name;</code>
Salin selepas log masuk

Fungsi ini berulang melalui baris yang sepadan dengan nilai input dan menambahkan nilai col2 pada rentetan. Fungsi LTRIM mengalih keluar koma di hadapan.

WM_CONCAT: Gunakan dengan Berhati-hati

Sesetengah versi Oracle lama mungkin termasuk WM_CONCAT. Walau bagaimanapun, ia adalah fungsi yang tidak disokong dan tingkah lakunya mungkin tidak konsisten merentas versi. Oleh itu, adalah dinasihatkan untuk mengelak WM_CONCAT dan menggunakan LISTAGG atau fungsi tersuai sebagai ganti:

<code class="language-sql">SELECT col1, WM_CONCAT(col2) FROM table_name GROUP BY col1;</code>
Salin selepas log masuk

Pilih kaedah yang sesuai untuk versi Oracle anda. LISTAGG ialah penyelesaian pilihan dan paling boleh dipercayai untuk versi yang lebih baharu. Untuk versi lama, fungsi tersuai menyediakan alternatif yang mantap. Elakkan WM_CONCAT melainkan benar-benar perlu dan fahami batasannya.

Atas ialah kandungan terperinci Bagaimana untuk Menggantikan GROUP_CONCAT MySQL 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