Oracle
 sql >> база данни >  >> RDS >> Oracle

Предоставя ли Oracle начин за връщане на множество поднизове от ред на низ/clob, който е анализиран?

Може би нещо подобно:

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;  
/

Това може да се използва по следния начин:

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

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

Ако не сте на 11.x, трябва сами да дефинирате типа на връщане:

create type char_table as table of varchar(4000);

и променете декларацията на функцията на:

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. Най-добри практики за съхраняване на пароли в shell / Perl скриптове?

  2. Oracle изберете взаимен под низ

  3. Проверка на информация за Oracle RAC Network и IP

  4. СЪЗДАЙТЕ Oracle процедура

  5. Научете за пакета DBMS_OUTPUT в Oracle