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

Sử dụng chuỗi trong thủ tục lưu trữ Oracle

Theo như tôi hiểu vấn đề của bạn, bạn cần một phương thức để chấp nhận một chuỗi được phân tách bằng dấu phẩy làm đầu vào, chia nó thành một tập hợp các số nguyên và sau đó so sánh một số (đọc:số nguyên) với các giá trị trong tập hợp này.

Oracle chủ yếu cung cấp ba loại bộ sưu tập - varrays , bảng lồng nhau mảng liên kết . Tôi sẽ giải thích cách chuyển đổi một chuỗi được phân tách bằng dấu phẩy thành một bảng lồng nhau và sử dụng nó để truy vấn hoặc so sánh.

Đầu tiên, bạn cần xác định một kiểu đối tượng trong lược đồ. Bạn chỉ có thể viết truy vấn bằng kiểu này nếu bạn xác định nó ở cấp giản đồ.

CREATE OR REPLACE TYPE entity_id AS OBJECT (id_val NUMBER(28));
/

CREATE OR REPLACE TYPE entity_id_set IS TABLE OF entity_id;
/

Tiếp theo, xác định một hàm như sau:

FUNCTION comma_to_nt_integer (p_comma_delimited_str IN VARCHAR)
    RETURN entity_id_set IS
    v_table     entity_id_set;
BEGIN
    WITH temp AS (SELECT TRIM(BOTH ',' FROM p_comma_delimited_str) AS str FROM DUAL)
        SELECT ENTITY_ID(TRIM (REGEXP_SUBSTR (t.str,
                                    '[^,]+',
                                    1,
                                    LEVEL)))
                   str
          BULK COLLECT INTO v_table
          FROM temp t
    CONNECT BY INSTR (str,
                      ',',
                      1,
                      LEVEL - 1) > 0;

    RETURN v_table;
END comma_to_nt_integer;

Bạn đã hoàn thành với DDL cần thiết cho nhiệm vụ này. Bây giờ, bạn có thể chỉ cần viết truy vấn của mình dưới dạng:

SELECT *
  FROM ..  
 WHERE ...
       AND gfcid in (table(comma_to_nt_integer(GDFCID_STRING)));


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Truy vấn Pivot động sử dụng Sql Developer Oracle

  2. Truy vấn một bảng lồng nhau

  3. Bảo mật cơ sở dữ liệu Oracle:Kiểm tra cơ sở dữ liệu

  4. Chuyển số thành từ trong hệ thống đánh số của người Ấn Độ

  5. Oracle:Tôi cần chọn n hàng từ mỗi k hàng của bảng