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

Oracle:PL / SQLで値が存在するかどうかを確認する最速の方法:リスト、VARRAY、または一時テーブル

    myGroupはVARRAYですか?文字列の場合は、次のようにしてみてください。

    select 1
      from dual
     where 'abc,NONE,def' like '%,NONE,%'
    

    作業している制約に従うのは難しいです...可能であれば、SQL内ですべてを実行すると、より高速になります。

    更新:

    したがって、すでにplsqlユニットにいて、plsqlユニットに留まりたい場合、上記のロジックは次のようになります。

    declare
        gp varchar2(200) := 'abc,def,NONE,higlmn,op';
      begin
        if ','||gp||',' like '%,NONE,%' then
          dbms_output.put_line('y');
        else
          dbms_output.put_line('n');
        end if;
      end;
    

    これ自体がループしている場合は、次のようにリストを1回作成します。

    declare
        gp varchar2(200)  := 'abc,def,NONE,higlmn,op';
        gp2 varchar2(200) := ',' || gp || ',';
      begin
        if g2 like '%,NONE,%' then
          dbms_output.put_line('y');
        else
          dbms_output.put_line('n');
        end if;
      end;
    

    また、おそらく次のようなものよりも速いinstrを試してください:

      declare
        gp varchar2(200) := ',abc,def,NONE,hig,';
      begin
        if instr(gp, ',NONE,') > 0 then
          dbms_output.put_line('y');
        else
          dbms_output.put_line('n');
        end if;
      end;
    

    これが言及された他の解決策よりも速いかどうかはわかりません(それは良いチャンスです)、それは他の試みです。



    1. AmazonAWSにPostgreSQLバックアップを保存するためのヒント

    2. PHP / MySQLi:INSERTでのSQLインジェクションを防ぐ方法(コードが部分的に機能している)

    3. カンマ区切り値を検索する方法

    4. キャッチ可能な致命的なエラー:データベースに挿入しようとすると、クラスstdClassのオブジェクトを文字列に変換できませんでした。