Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara membagi data yang ditanyakan dengan pembatas di Oracle?

Anda dapat melakukannya menggunakan klausa pemfaktoran sub-kueri rekursif dan fungsi string sederhana (bukan ekspresi reguler lambat).

(Catatan:ini juga tidak memiliki masalah yang dilakukan kueri hierarkis ketika ada beberapa baris input yang menghasilkan lebih banyak baris output secara eksponensial di setiap kedalaman karena tidak dapat mengkorelasikan setiap baris dengan induknya sehingga akan mengkorelasikannya dengan semua baris di tingkat hierarki sebelumnya.)

Pengaturan Oracle :

CREATE TABLE some_table( some_id, value ) AS
  SELECT 8, 'A1,A2,A3;A4,A5,A6' FROM DUAL UNION ALL
  SELECT 8, 'B1,B2,B3;B4,B5,B6' FROM DUAL UNION ALL
  SELECT 8, 'C1,C2,C3;C4,C5,C6' FROM DUAL;

Kueri :

WITH line_start_end ( some_id, value, startidx, endidx ) AS (
  SELECT some_id,
         value,
         1,
         INSTR( value, ';', 1 )
  FROM   some_table
  WHERE  some_id = 8
UNION ALL
  SELECT some_id,
         value,
         endidx + 1,
         INSTR( value, ';', endidx + 1 )
  FROM   line_start_end
  WHERE  endidx > 0
)
SELECT some_id,
       CASE
       WHEN endidx = 0
       THEN SUBSTR( value, startidx )
       ELSE SUBSTR( value, startidx, endidx - startidx )
       END AS value
FROM   line_start_end;

Keluaran :

db<>fiddle di sini



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara membuat prosedur tersimpan Oracle yang dapat mengembalikan entitas tertentu serta semua entitas

  2. Oracle memanggil prosedur tersimpan di dalam pilih

  3. Oracle ORA-01031:hak istimewa yang tidak mencukupi saat membuat pengguna

  4. Menghubungkan ke Oracle DB berkemampuan SSL melalui Java (JDBC)

  5. Cara tercepat untuk menghitung hash dari seluruh tabel