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

WHERE IN điều kiện không chấp nhận giá trị chuỗi

Bạn có thể làm điều đó bằng cách sử dụng một bộ sưu tập:

CREATE TYPE VARCHAR2s_Table IS TABLE OF VARCHAR2(100);
/

Sau đó, nhập dữ liệu của bạn như sau:

SELECT *
FROM   table_name
WHERE  user_data MEMBER OF VARCHAR2s_Table( 'abc123','xyz456','pqr789' );

Ngoài ra :

Bạn có thể tạo một hàm để chia nhỏ dữ liệu và tạo bộ sưu tập:

CREATE TYPE VARCHAR2_TABLE AS TABLE OF VARCHAR2(4000);
/

CREATE OR REPLACE FUNCTION split_String(
  i_str    IN  VARCHAR2,
  i_delim  IN  VARCHAR2 DEFAULT ','
) RETURN VARCHAR2_TABLE DETERMINISTIC
AS
  p_result       VARCHAR2_TABLE := VARCHAR2_TABLE();
  p_start        NUMBER(5) := 1;
  p_end          NUMBER(5);
  c_len CONSTANT NUMBER(5) := LENGTH( i_str );
  c_ld  CONSTANT NUMBER(5) := LENGTH( i_delim );
BEGIN
  IF c_len > 0 THEN
    p_end := INSTR( i_str, i_delim, p_start );
    WHILE p_end > 0 LOOP
      p_result.EXTEND;
      p_result( p_result.COUNT ) := SUBSTR( i_str, p_start, p_end - p_start );
      p_start := p_end + c_ld;
      p_end := INSTR( i_str, i_delim, p_start );
    END LOOP;
    IF p_start <= c_len + 1 THEN
      p_result.EXTEND;
      p_result( p_result.COUNT ) := SUBSTR( i_str, p_start, c_len - p_start + 1 );
    END IF;
  END IF;
  RETURN p_result;
END;
/

Sau đó, bạn có thể làm:

SELECT *
FROM   table_name
WHERE  user_data MEMBER OF split_String( 'abc123,xyz456,pqr789', ',' );

hoặc:

SELECT *
FROM   table_name
WHERE  user_data MEMBER OF split_String( TRIM( '''' FROM '''abc123'',''xyz456'',''pqr789''' ), ''',''' );


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhà cung cấp không tương thích với phiên bản máy khách Oracle

  2. Oracle - ORA-01489:kết quả của việc nối chuỗi quá dài

  3. Điền mục cây với nhóm bản ghi trong các biểu mẫu Oracle

  4. Sự khác biệt giữa các lớp trình điều khiển Oracle jdbc?

  5. Oracle ODP.net Trình điều khiển được quản lý và Không được quản lý