create or replace
PROCEDURE get_txn_by_account_id(
p_ACCOUNT_ID IN txn.ACCOUNT_ID%TYPE DEFAULT NULL
)
IS
BEGIN
FOR x IN (SELECT * FROM txn where account_id=p_ACCOUNT_ID)
LOOP
dbms_output.put_line(x.txn_ID || ', ' || x.txn_VER_NB);
END LOOP;
END get_txn_by_account_id;
私のストアド プロシージャは、検索条件として 1 つの入力に基づいて選択を発行し、検索結果を出力します。私の入力は ACCOUNT_ID です。4 つの追加の入力パラメーター (param_a、param_b、param_c、param_d) を追加したいと思います - 少なくとも 2 つがオプションになります。
だから私はおそらくストアドプロシージャ宣言を次のように変更します
PROCEDURE get_txn_by_account_id(
p_ACCOUNT_ID IN txn.ACCOUNT_ID%TYPE DEFAULT NULL,
p_PARAM_A IN txn.PARAM_A%TYPE DEFAULT NULL,
p_PARAM_B IN txn.PARAM_B%TYPE DEFAULT NULL,
p_PARAM_C IN txn.PARAM_C%TYPE DEFAULT NULL,
p_PARAM_D IN txn.PARAM_D%TYPE DEFAULT NULL
)
したがって、私の SELECT には、ストアド プロシージャに渡されるオプションのパラメーターに基づいて、さまざまな数のクエリ パラメーターが含まれる場合があります。
例えば、
FOR x IN (SELECT * FROM txn where account_id=p_ACCOUNT_ID, param_a=p_PARAM_A, param_b=p_PARAM_B, param_c=p_PARAM_C, param_d=p_PARAM_D)
FOR x IN (SELECT * FROM txn where account_id=p_ACCOUNT_ID, param_a=p_PARAM_A, param_c=p_PARAM_C, param_d=p_PARAM_D)
FOR x IN (SELECT * FROM txn where account_id=p_ACCOUNT_ID, param_a=p_PARAM_A, param_b=p_PARAM_B, param_d=p_PARAM_D)
また
FOR x IN (SELECT * FROM txn where account_id=p_ACCOUNT_ID, param_a=p_PARAM_A, param_b=p_PARAM_B)
等
私は問題を抱えています-ストアドプロシージャに渡されるオプションのパラメーターに基づいてSELECTステートメントが変更されるようにストアドプロシージャをコーディングする方法-おそらく、プロシージャに渡されたオプションのパラメーターに基づいてクエリステートメントを構築する文字列ビルダー、結果の文字列をクエリで使用しますか? これが可能かどうかはわかりません。確かにこれはよくある問題です - 誰か提案はありますか? ありがとう!