使用oracle中的过程的默认值

时间:2014-03-20 17:20:08

标签: oracle cursor

对于这个程序,如果我分别通过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..>

2 个答案:

答案 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被编入索引,这可能会产生更好(或至少不同)的计划。