plsql调用函数返回值为空

函数:
create or replace function avg_pric(v_ctgry in varchar2,v_pric in out number) return number is
Result number;
v_qnty number;
begin
if v_pric is null then
v_pric := 0;
end if;
select avg(productprice),min(quantity) into v_pric,v_qnty from productinfo where category=v_ctgry and productprice>v_pric;
return(v_qnty);
exception
when no_data_found then
dbms_output.put_line('没有对应的数据!');
when too_many_rows then
dbms_output.put_line('对应数据过多,请确认!');
end avg_pric;

调用函数:
declare
v_ctgry varchar2(10) := '';
v_pric number := 30;
v_qnty varchar(20);
begin
v_qnty := avg_pric(v_ctgry,v_pric);
dbms_output.put_line('平均价格:' || v_pric);
dbms_output.put_line('最低的产品数量是:' || v_qnty);
end;
/
输出结果:

平均价格:
最低的产品数量是:

返回值为空,求解。感谢!

3个回答

函数有些问题。v_ctgry 为空的时候,sql写成is null,不然查不到结果
所以修改一下函数,做一个分支

if v_ctgry is null or v_ctgry='' then  
   select avg(productprice),min(quantity) into v_pric,v_qnty from productinfo where category is null and productprice>v_pric;
else
   select avg(productprice),min(quantity) into v_pric,v_qnty from productinfo where category=v_ctgry and productprice>v_pric;
end if;
l_d_123
l_d_123 回复danielinbiti: AVG(PRODUCTPRICE) MIN(QUANTITY) 78 48
5 年多之前 回复
l_d_123
l_d_123 回复danielinbiti: 有值
5 年多之前 回复
danielinbiti
danielinbiti 回复l_d_123: 你执行一下sql, select avg(productprice),min(quantity) from productinfo where category is null and productprice>30;有没有值
5 年多之前 回复
l_d_123
l_d_123 改了,还是不行,输出结果:
5 年多之前 回复

改了,还是不行,输出结果:

平均价格:
最低的产品数量是:

PL/SQL procedure successfully completed

求解,谢谢

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐