以下に示すように、Oracleにストアドプロシージャがあります。
CREATE PROCEDURE MY_TEST_PROC(
CUR OUT SYS_REFCURSOR,
PARAM_THAT_WILL_BE _USED_INSIDE_WHERE_IN
)
AS
BEGIN
OPEN CUR FOR
SELECT *
FROM MY_TABLE
WHERE COL1 IN (here I want to put values received from C#)
END;
ASP.NET アプリケーション側には、いくつかのオプションを持つ select 要素があります。これらのリスト項目を WHERE 句で使用したいと考えています。ストアド プロシージャに VARCHAR2 入力パラメータを設定し、リスト項目からコンマ区切りの文字列を作成して、プロシージャに送信できることを知っています。この方法を使用する場合、次の 2 つの懸念事項があります。
- Web サイトを SQL インジェクションに対して脆弱にしています
- 私のストアド プロシージャでは、避けたい EXECUTE ('SELECT ...') パターンを使用する必要があります。
これらのリスト項目をストアド プロシージャに送信し、WHERE IN 句内で使用するにはどうすればよいですか? 私は ODP.NET を使用しており、UDT について聞いたことがありますが、その使用方法がわかりません。