Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak przeanalizować varchar2 i zrobić z niego wiele wierszy?

Możesz użyć funkcji potoku:

CREATE or replace TYPE test_type AS TABLE OF varchar2(40)

CREATE or replace FUNCTION test_func (d VARCHAR2)
   RETURN test_type
   PIPELINED
IS
BEGIN
   FOR C1 IN (    SELECT REGEXP_SUBSTR (d, '[^,]+', 1, LEVEL) x
                    FROM DUAL
              CONNECT BY REGEXP_SUBSTR (d, '[^,]+', 1, LEVEL) IS NOT NULL)
   LOOP
      PIPE ROW (c1.x);
   END LOOP;
END;
/

WITH test
     AS ( your_query_here )
SELECT x.id2, x.mydate, y.*
  FROM test x, TABLE (test_func (x.d)) y

Używam tutaj mydate zamiast daty (słowo zastrzeżone) i d zamiast danych. Próbka:

WITH test
     AS (SELECT 2 AS id2, SYSDATE AS mydate, '1.0,1.1,1.2,11,1.4,1.5,2.6,2.7,2.8,2.9,44,55' AS d FROM DUAL
         UNION ALL
         SELECT 3 AS id2, SYSDATE + 1 AS mydate, '19.5,19.9,11.5,11.1,21.2,33,1.4,1.5,2.6,2.7,2.8,2.9' AS d
           FROM DUAL
         UNION ALL
         SELECT 4 AS id2, SYSDATE + 1 AS mydate, '9.5,9.9,1.5,1.1,1.2,66,1.4,1.5,2.6,2.7,2.8,2.9' AS d
           FROM DUAL)
SELECT x.id2, x.mydate, y.*
  FROM test x, TABLE (test_func (x.d)) y

Niektóre linki:

Jak podzielić ciąg oddzielony przecinkami i przekazać do klauzuli IN instrukcji select

Korzystanie z funkcji tabel potokowych i równoległych



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błędy wyzwalania ORA-04092 ORA-04088

  2. ORA-00907:Brak prawego nawiasu przy tworzeniu klucza obcego Oracle 12c

  3. Podstawowy problem:podstawowe dane wyjściowe konsoli PL/SQL?

  4. Błąd wyzwalacza ORACLE

  5. COALESCE() Funkcja w Oracle