Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Kursor dinamis Oracle

Singkatnya, klausa IN tidak mendukung variabel bind.. Klausa ini hanya mendukung nilai, seperti yang Anda gunakan.. Anda perlu menentukannya seperti IN (var1, var2);

Tanpa mengetahui Anda, Anda telah menggunakan variabel bind. Salah satu solusinya adalah menggunakan REFCURSOR Dengan membentuk string kueri secara dinamis.

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;

Salah satu jawaban saya yang lain juga memiliki cara lain menggunakan koleksi, untuk daftar klausa IN yang lebih besar.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kebocoran memori driver Oracle - Tomcat

  2. Prosedur untuk Membalikkan String di PL/SQL

  3. Oracle ODP.Net dan EF CodeFirst - Kesalahan SaveChanges

  4. Mengapa saya mendapatkan kesalahan java.lang.AbstractMethodError:oracle.jdbc.driver.OracleConnection?

  5. Koleksi Oracle di mana klausa