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

OracleストアドプロシージャのWHERE句にコンマ区切り値で送信する

    理想的には、コンマ区切りの値で構成される単一の文字列を渡すのではなく、コレクションを渡します。

    のようなものがある場合
    CREATE TYPE value_tbl AS TABLE OF VARCHAR2(10);
    

    次に、そのコレクションをプロシージャに渡して、WHEREで使用できます。 条項

    CREATE OR REPLACE PROCEDURE procedure_name( p_values IN value_tbl )
    AS
      ...
    BEGIN
      FOR i IN (SELECT *
                  FROM table_name
                 WHERE column_name IN (SELECT *
                                         FROM TABLE( p_values )))
      LOOP
        ...
      END LOOP;
    END;
    

    本当にコンマ区切りの文字列を渡す必要がある場合は、同じコレクションタイプを定義してから、トムカイトのstr2tbl 機能 。ただし、最初にコレクションを渡すよりも効率が悪くなります。



    1. SQLサーバーのRollUPと合計しますが、最後の要約だけですか?

    2. 同じアクセス方法でデッドロックが発生する可能性はありますか?

    3. 読み取りスレーブ、読み取り/書き込みマスターセットアップ

    4. SQL:最初の文字のみを大文字にする