Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Apakah Oracle menyediakan cara mengembalikan beberapa substring dari baris string/clob yang telah diuraikan?

Sesuatu seperti ini mungkin:

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

Ini dapat digunakan seperti ini:

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

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

Jika Anda tidak menggunakan 11.x, Anda harus menentukan sendiri jenis pengembaliannya:

create type char_table as table of varchar(4000);

dan ubah deklarasi fungsi menjadi:

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. Apakah ada fungsi nvl() di Ruby atau apakah saya harus menulisnya sendiri?

  2. ORACLE RAW dalam format string ke GUID Standar

  3. SOUNDEX() Fungsi di Oracle

  4. Fungsi Oracle menggunakan Hibernate

  5. Oracle - Buat indeks hanya jika tidak ada