Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle có cung cấp cách trả về nhiều chuỗi con từ một hàng chuỗi / khối đã được phân tích cú pháp không?

Có thể như thế này:

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

Điều này có thể được sử dụng như thế này:

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

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

Nếu bạn không sử dụng 11.x, bạn cần tự xác định kiểu trả về:

create type char_table as table of varchar(4000);

và thay đổi khai báo hàm thành:

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. Xóa các hàng để có tối đa x dòng cho mỗi nhóm trong bảng Oracle

  2. Oracle SQL Tìm 5 mức lương thấp nhất

  3. Tách một chuỗi được phân tách bằng dấu phẩy trong Oracle không hoạt động

  4. ORA-01036:tên / số biến không hợp lệ trong khi gọi hàm được lưu trữ

  5. Làm thế nào để lưu trữ kết quả của một hàm sẽ trả về sysrefcursor?