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;
我的存储过程根据一个输入作为搜索条件发出一个select并输出搜索结果。我的输入是 ACCOUNT_ID。我想添加4个额外的输入参数(param_a,param_b,param_c,param_d) - 其中至少两个将是 可选。Oracle存储过程 - 根据可选参数动态生成select语句
所以我可能会改变我的存储过程的声明像
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
)
所以我的选择可能有不同数量的查询PARAMS基于传递给存储 PROC什么可选PARAMS。
例如,
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语句改变我的代码存储过程可选参数通过 传递给存储过程 - 可能是一个字符串构建器,它根据传递给proc的可选参数构建查询语句, ,然后在查询中使用结果字符串?我不确定这是否可能。当然这是一个普遍的问题 - 任何人有任何建议吗?谢谢!
为什么'p_ACCOUNT_ID'是可选的?或者换一种说法,如果没有提供'p_ACCOUNT_ID',你想返回什么? – 2012-12-14 17:59:25
在这种情况下,我会返回一个空集 – user619804