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

NUMBER列のIN句内でコンマ区切り値を使用する

    本当にコンマ区切りのリストを返す必要がありますか?一般に、コレクションタイプを宣言する方がはるかに優れています

    CREATE TYPE num_table
        AS TABLE OF NUMBER;
    

    このコレクションのインスタンスを返す関数を宣言します

    CREATE OR REPLACE FUNCTION get_nums
      RETURN num_table
    IS
      l_nums num_table := num_table();
    BEGIN
      for i in 1 .. 10
      loop
        l_nums.extend;
        l_nums(i) := i*2;
      end loop;
    END;
    

    次に、そのコレクションをクエリで使用します

    SELECT *
      FROM users_table
     WHERE user_id IN (SELECT * FROM TABLE( l_nums ));
    

    動的SQLを使用することも可能です(@Sebasが示しています)。ただし、その欠点は、プロシージャを呼び出すたびに新しいSQLステートメントが生成され、実行する前に再度解析する必要があることです。また、ライブラリキャッシュに圧力がかかるため、Oracleは他の多くの再利用可能なSQLステートメントを削除し、他の多くのパフォーマンスの問題を引き起こす可能性があります。



    1. 一重引用符を回避する衛生状態は、SQL ServerのSQLインジェクションによってどのように打ち負かされますか?

    2. 30日より古い日付レコードを検索するOracleSQLWhere句

    3. Oracle Forms /Forms6iでのタイマーの作成と時計の表示

    4. コミットされていない分離レベルの読み取り