sql >> データベース >  >> RDS >> Oracle

動的カーソルOracle

    つまり、IN句はバインド変数をサポートしていません。使用した方法で値のみをサポートします。IN (var1, var2)のように指定する必要があります。;

    あなたを知らずに、バインド変数を使用しました。回避策の1つは、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;
    

    他の回答の1つ より大きなIN句リストのために、コレクションを使用する他の方法もあります。



    1. 主キーを整数からシリアルに変換する方法は?

    2. Windows用のmysqlデータベースのERDを描画するのに最適なソフトウェアは何ですか

    3. 合成データの生成

    4. OracleJDBCシンクライアント識別子の変更