Oracle
 sql >> база данни >  >> RDS >> Oracle

Динамичен курсор Oracle

Накратко, клаузата IN не поддържа променливи за свързване. Поддържа само стойност, по начина, по който сте използвали.. Трябва да го посочите като IN (var1, var2);

Без да ви познаваме, вие сте използвали свързващи променливи. Едно заобиколно решение е да използвате REFCURSOR Чрез динамично формиране на низ на заявка.

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;

Един от другите ми отговори има и друг начин за използване на колекции, за по-голям списък IN клауза.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка при опит за импортиране на драйвер oracle jdbc7 с Maven

  2. Оператор Oracle (+).

  3. Excel VBA - Oracle DB връзка - Изпълнението на заявка за актуализиране не работи

  4. (Oracle/SQL) Обединете всички типове данни в една колона

  5. Цикъл върху стойности, създаване на динамична заявка и добавяне към набор от резултати