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

Sự khác biệt giữa hai danh sách phân cách không có thứ tự (Oracle)

Nếu bạn có quyền truy cập vào APEX_UTIL , bạn có thể phân tích cú pháp chuỗi thành một mảng, chuyển đổi chúng thành bộ sưu tập, sau đó sử dụng MULTISET EXCEPT (giống MINUS nhưng dành cho bộ sưu tập):

SET SERVEROUT ON
DECLARE
  TYPE set_t IS TABLE OF varchar2(100);
  listA APEX_APPLICATION_GLOBAL.vc_arr2;
  listB APEX_APPLICATION_GLOBAL.vc_arr2;
  excpt set_t;
  FUNCTION to_set_t (arr IN APEX_APPLICATION_GLOBAL.vc_arr2)
    RETURN set_t IS
    rset set_t := set_t();
  BEGIN
    rset.EXTEND(arr.COUNT);
    FOR i IN 1..arr.COUNT LOOP
      rset(i) := TRIM(arr(i));
    END LOOP;
    RETURN rset;
  END;
BEGIN
  -- parse lists into arrays
  listA := APEX_UTIL.string_to_table('a1, b4, g3, h6, t8, a0',',');
  listB := APEX_UTIL.string_to_table('b4, h6, a0, t8, a1',',');
  -- convert arrays to collections, then do the minus
  excpt := to_set_t(listA) MULTISET EXCEPT to_set_t(listB);
  -- display the results
  FOR i IN 1..excpt.COUNT LOOP
    DBMS_OUTPUT.put_line(excpt(i));
  END LOOP;
END;

Kết quả:

g3

Thông tin thêm về toán tử MULTISET, được giới thiệu trong 10g: http:// www.oracle-developer.net/display.php?id=303




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CẬP NHẬT về chế độ xem dường như bảo toàn khóa trong Oracle nâng ORA-01779

  2. Oracle:Làm cách nào để thêm phút vào dấu thời gian?

  3. Cột tự động tăng dần - Trình tự làm giá trị mặc định trong Oracle

  4. Câu lệnh If trong mệnh đề Where

  5. Cách tạo mảng liên kết trong cơ sở dữ liệu Oracle