我正在使用Oracle 12c,并且具有一个存储过程,该存储过程接受4个输入字段,使用相同的字段查询数据库并返回结果集。但是,这4个输入字段是来自前端的用户输入值,因此用户可能会或可能不会输入所有4个输入字段。我将需要使用接收到的任何值来执行存储过程,而忽略其余部分。
存储过程定义:
procedure retrieve_data (
p_sn_no in integer,
p_name in varchar2,
p_city in varchar 2,
p_phone in integer,
return_msg out number)
is begin
select count(*) into return_msg from <table_name>
where sn_no=p_sn_no and name=p_name
and city=p_city and phone=p_phone
end
要求是使用任何或所有输入参数来调用上述存储过程,但是如何在具有全部或少量输入字段的存储过程中准备select
语句,而不是像select count(*) into return_msg from <table_name> where sn_no=p_sn_no
传递所有4个输入字段?
答案 0 :(得分:0)
存储过程调用仍会传递所有输入参数值,只有用户未提供的那些参数才具有NULL值,因此您的查询应利用该参数:
select count(*) into return_msg from <table_name>
where (sn_no=p_sn_no or p_sn_no is null)
and (name=p_name or p_name is null) -- etc.
...
答案 1 :(得分:0)
尝试一下:
procedure retrieve_data
(return_msg out number,
p_sn_no in integer DEFAULT NULL,
p_name in varchar2 DEFAULT NULL,
p_city in varchar2 DEFAULT NULL,
p_phone in integer DEFAULT NULL)
is
begin
select count(*)
into return_msg
from
where sn_no = NVL(p_sn_no, sn_no)
and name = NVL(p_name, name)
and city = NVL(p_city, city)
and phone = NVL(p_phone, phone)
end