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

Con trỏ động Oracle

Tóm lại, mệnh đề IN không hỗ trợ các biến ràng buộc. Nó chỉ hỗ trợ cho giá trị, theo cách bạn đã sử dụng .. Bạn cần chỉ định nó như IN (var1, var2);

Nếu không biết bạn, bạn đã sử dụng các biến ràng buộc. Một giải pháp là sử dụng REFCURSOR Bằng cách tạo chuỗi truy vấn động.

DECLARE
 VAR1 VARCHAR2(500);
 CUR1 SYs_REFCURSOR;
 QUERY_STRING VARCHAR2(2000) := 'SELECT T.COL1 FROM TABLE1 T WHERE T.COL1 IN';

 MYREC IS RECORD 
 (
   COL1 VARCHAR(1000);
 );

 myrecord MYREC;

 BEGIN
  VAR1 := q'['V1','V2']';
  QUERY_STRING:= QUERY_STRING||'('||VAR1||')';

  OPEN CUR1 FOR QUERy_STRING;

    LOOP
      FETCH CUR1 INTO myrecord;
      DBMS_OUTPUT.PUT_LINE(myrecord.COL1);
      EXIT WHEN v_my_ref_cursor%NOTFOUND;
        ..
      -- your processing
    END LOOP;

  CLOSE CUR1;

END;

Một trong những câu trả lời khác của tôi cũng có cách khác bằng cách sử dụng bộ sưu tập, cho danh sách mệnh đề IN lớn hơn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kết nối với Cơ sở dữ liệu Oracle 12c từ Phiên bản Cộng đồng Tích hợp Dữ liệu Pentaho (Kettle)

  2. Xuất kết quả truy vấn Oracle sang tệp HTML khi sử dụng SQLcl

  3. Chỉ nhận ngày không có thời gian trong Oracle

  4. Phương thức thực thi Spring Hibernate Template trả về loại đối tượng nào cho một truy vấn đếm trên Oracle?

  5. Kiểm tra xem các bảng có giống nhau hay không bằng cách sử dụng SQL trong Oracle