对于这个程序,如果我分别通过1和2,它应该给我两个不同的结果。 但是如果我没有传递任何参数,proc应该返回参数1和2的数据。
问题是获取默认NULL值的数据。我怎样才能做到这一点 ?我应该使用ref游标吗? 或者有什么办法可以在'where'子句中加入if / case条件吗? - 1表示分区,2表示非分区表,NULL表示默认值
create or replace
PROCEDURE stats(p_run_type IN NUMBER DEFAULT NULL ) IS
...
BEGIN
FOR c IN
( SELECT exe_order
,table_name
,exec_gather_stat
FROM view_stats
WHERE exe_order = p_run_type
)
LOOP
BEGIN
<..do insert..>
答案 0 :(得分:2)
nvl
应该可以解决问题:
...
WHERE exe_order = nvl(p_run_type, exe_order)
...
如果exe_order
为空,这将采用p_run_type
的所有可能值。
答案 1 :(得分:1)
作为nvl
的替代方案,你也可以这样做:
WHERE (p_run_type IS NULL OR exe_order = p_run_type)
如果exe_order
被编入索引,这可能会产生更好(或至少不同)的计划。