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

SQLDeveloperで複数値パラメータのバインドを入力する方法

    これはSQLDeveloperの制限ではなく、バインド変数がどのように機能するかを示しています。あなたは効果的にやっています:

    select count(*) from foo 
    where foo.id in ('1,2,3')
    

    ...これは実際にはin (to_number('1,2,3')) 、したがってエラー。単一の値で機能し、小数点がコンマの場合は2つの値で奇数の結果が得られ、それ以上の場合は失敗します。

    バインドプロンプトで複数の値を入力したり、in()に複数の値を指定したりすることはできません。 シングルバインドで。あなたは<ストライク>チートすることができます ただし、少し独創的です。 xmltable 関数は、コンマ区切りの文字列を、それぞれに1つの値を持つ行に変換します。

    var ids varchar2(50);
    exec :ids := '1,2,3';
    select * from xmltable(:ids);
    
    COLUMN_VALUE
    ------------
    1            
    2            
    3            
    

    その後、それをルックアップテーブルとして使用できます:

    select count(*)
    from xmltable(:ids) x
    join foo f on f.id = to_number(x.column_value);
    
      COUNT(*)
    ----------
             3 
    



    1. データベースの設計と特定の関係のモデリング

    2. 特定の列の値が2回表示されるまで、一番上の行を選択します

    3. フォロワー/フォローデータベース構造

    4. 1つのクエリで複数のテーブル、サイズ、およびテーブルスペースをカウント(*)する方法