sql >> Database teknologi >  >> RDS >> Oracle

Hvordan opdeles forespurgte data efter afgrænsning i Oracle?

Du kan gøre det ved at bruge en rekursiv underforespørgselsfaktorsætning og simple strengfunktioner (i stedet for langsomme regulære udtryk).

(Bemærk:dette har heller ikke de problemer, hierarkiske forespørgsler gør, når der er flere inputrækker af det, der genererer eksponentielt flere outputrækker i hver dybde, da det ikke kan korrelere hver række med dets overordnede, så det vil korrelere det med alle rækker på det tidligere hierarkiniveau.)

Oracle-opsætning :

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;

Forespørgsel :

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;

Output :

db<>fiddle her



  1. Nye Microsoft Access-funktioner på vej!

  2. Sådan gendannes eller ændres Oracle sysdba adgangskode

  3. Indstillinger for forbindelsestimeout for Oracle-database

  4. Forskellen mellem nøgle, primær nøgle, unik nøgle og indeks i MySQL