sql >> Databáze >  >> RDS >> Oracle

Poskytuje Oracle způsob, jak vracet více podřetězců z řádku řetězce/klonu, který byl analyzován?

Možná něco takového:

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

To lze použít takto:

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

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

Pokud nejste na 11.x, musíte sami definovat návratový typ:

create type char_table as table of varchar(4000);

a změňte deklaraci funkce na:

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



  1. Android:Použití SSL/HTTPS pro připojení pomocí PHP k databázi a použití POST/GET

  2. Jak mohu napsat úplný vyhledávací indexový dotaz, který nebude brát v úvahu žádná ignorovaná slova?

  3. Efektivita mezipaměti dotazů

  4. SqlAlchemy:získání id posledního vloženého záznamu