cur_pric number;
未赋值就是nullproduct_inouttype_prc(cur_ctgyid,cur_pric);
进入第一个存储过程 传入了一个nullSYS.DBMS_OUTPUT.PUT_LINE('parmparm_pric的值是:'||parmparm_pric);
SYS.DBMS_OUTPUT.PUT_LINE('1-parmparm_pric的值是:'||(1-parmparm_pric));你打印的就是传入的nullif SQL%found then
parmparm_pric:=SQL%rowcount;
end if;这里类型inout的第二个参数被赋值为3
product_inouttype_prc(cur_ctgyid,cur_pric);
第一个存储过程结束 cur_pric获得传出的值:3if cur_pric>0 then
SYS.DBMS_OUTPUT.PUT_LINE('共修改'||cur_pric||'条记录。');
end if;因为你声明的是inout 所以product_inouttype_prc结束后,out类型的参数获得了值。

解决方案 »

  1.   

    额,非常非常感谢 forgetsam 的热心回答,受你的启发(第二行对我有至关重要的启发)。
    我问了下度娘null的相关问题解答,找到一篇解说,然后我又结合我的表来比对,总算弄明白了。
    原SQL语句:
    update PRODUCTINFOLXX
    set productprice=productinfolxx.productprice*(1-parmparm_pric)
    where productinfolxx.category=parm_ctgyid;
    其中1-parmparm_pric的值是null,productprice*null的结果还是null,实际上这条更新语句是把类型是洗衣机的产品价格更新成null了。Oracle中NULL的使用详解