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

Czy Oracle zapewnia sposób zwracania wielu podciągów z przeanalizowanego wiersza ciągu/klobów?

Może coś takiego:

CREATE OR REPLACE FUNCTION explode(longline varchar)
  RETURN sys.dbms_debug_vc2coll PIPELINED
IS  
  pos PLS_INTEGER;
  lastpos PLS_INTEGER;
  element varchar(2000);
BEGIN
   lastpos := 1;
   pos := instr(longline, ',');

   while pos > 0 loop
      element := substr(longline, lastpos, pos - lastpos);
      lastpos := pos + 1;
      pos := instr(longline, ',', lastpos);
      pipe row(element);
   end loop;

   if lastpos <= length(longline) then
      pipe row (substr(longline, lastpos));
   end if;

   RETURN;
END;  
/

Można tego użyć w następujący sposób:

SQL> select * from table(explode('1,2,3'));

COLUMN_VALUE
---------------------------------------------
1
2
3
SQL>

Jeśli nie korzystasz z 11.x, musisz samodzielnie zdefiniować typ zwrotu:

create type char_table as table of varchar(4000);

i zmień deklarację funkcji na:

CREATE OR REPLACE FUNCTION explode(longline varchar)
  RETURN char_table pipelined
.....



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używanie `SELECT` do wywołania funkcji

  2. 4 sposoby formatowania liczby bez ułamków dziesiętnych w Oracle

  3. sqoop podzielone według opcji daje błąd podczas używania kolumny pochodnej w podziale według opcji

  4. Jak wywołać procedurę składowaną Oracle w Codeigniter

  5. Połącz wiersze w CLOB