我想将一个变量添加到存储过程但我希望能够以两种不同的方式之一运行存储过程: - 如果它为null,则它运行所有内容,否则只匹配记录 - 如果为null,则将其设为默认值,否则只匹配记录
var countyvar varchar2(50);
begin
if countyvar is null then 'yyyy';
end if;
end;
OR
var countyvar varchar2(50);
begin
if countyvar is null then run script for all locations;
if countyvar is 'yyyy' then run script for only that location;
end if;
end;
在这里使用:
select locations, count(accountID) from dim_locations where location_name = :COUNTYVAR group by locations;
答案 0 :(得分:0)
我不知道这对你有帮助,但你可以使用" DEFAULT"过程参数声明中的关键字。例如:
PROCEDURE Get_emp_names (Dept_num IN NUMBER DEFAULT 20)
IS ...
然后您可以从内部控制手术流程。只需检查" countyvar"在程序中是否为空。
答案 1 :(得分:0)
只需执行此操作...但请注意索引性能,根据您的数据大小,它可能会或可能不会比预期慢一点......测试它并根据需要稍微调整一下。
select locations, count(accountID)
from dim_locations
where ( :COUNTYVAR IS NULL
OR location_name = :COUNTYVAR )
group by locations;
[[其他答案中提及的DEFAULT选项说明]]
DEFAULT选项仅在未提供参数时启动,而不是在它为NULL时启动...这是一个显示行为的测试样本 - 试试看;)
set serverout on
declare
lv_var varchar2(10);
procedure p_test ( in_parm IN varchar2 default 10 )
is
begin
dbms_output.put_line ( 'in_parm is: ' || nvl(in_parm,'<<NULL>>') );
end;
begin
p_test ( 123 );
p_test ();
p_test ( NULL );
lv_var := 234;
p_test ( lv_var );
lv_var := NULL;
p_test ( lv_var );
end;
/
in_parm is: 123
in_parm is: 10
in_parm is: <<NULL>>
in_parm is: 234
in_parm is: <<NULL>>