请教Oracle中存储过程参数问题
本人刚开始学习Oracle不久,现在遇到个问题,很是困惑,希望知道的各位BOSS级人物能帮我解答下,在此先谢谢各位热心人了
下面是两个存储过程的语句,不用看的特别仔细,大体上知道是怎么个逻辑就可以了:
1、过程名:product_inouttype_prc
2、过程名:product_clinouttype_prc
第二过程中调用了第一个过程,第一个过程的第二个参数是inout类型的。
第二个过程中声明了一个变量cur_pric,但没有赋值。在调用第二个过程时,直接当参数传了进去。这里我就不懂了,不给变量赋值也能当参数传给其他过程吗?还是说在没赋值的情况下当成参数传给其他过程时,Oracle会给这个没赋值只声明的变量自动赋个初始值吗?
可我在第一个过程中输出了这个参数的值,以及涉及这个参数的运算结果,可运行后输出的是空的,啥也没有。
我调用第二个过程来运行,也没有出现报错,都正常。
我这里就是不理解,那个cur_pric变量在第一个过程中是如何计算的,居然不报错?
希望各位帮我解惑!!!
下图是我运行后的结果:

我的执行语句是:exec PRODUCT_CLINOUTTYPE_PRC('洗衣机');

下面是两个存储过程的语句,不用看的特别仔细,大体上知道是怎么个逻辑就可以了:
1、过程名:product_inouttype_prc
create or replace procedure product_inouttype_prc(parm_ctgyid in varchar2,parmparm_pric in out number)
as
begin
update PRODUCTINFOLXX
set productprice=productinfolxx.productprice*(1-parmparm_pric)
where productinfolxx.category=parm_ctgyid;
SYS.DBMS_OUTPUT.PUT_LINE('parmparm_pric的值是:'||parmparm_pric);
SYS.DBMS_OUTPUT.PUT_LINE('1-parmparm_pric的值是:'||(1-parmparm_pric));
if SQL%found then
parmparm_pric:=SQL%rowcount;
end if;
end product_inouttype_prc;2、过程名:product_clinouttype_prc
create or replace procedure product_clinouttype_prc(parm_ctgyname in varchar2)
as
cur_ctgyid categoryinfolxx.categoryid%type;
cur_pric number;
begin
select categoryinfolxx.categoryid into cur_ctgyid
from categoryinfolxx
where categoryinfolxx.categoryname=parm_ctgyname;
product_inouttype_prc(cur_ctgyid,cur_pric);
if cur_pric>0 then
SYS.DBMS_OUTPUT.PUT_LINE('共修改'||cur_pric||'条记录。');
end if;
exception
when no_data_found then
SYS.DBMS_OUTPUT.PUT_LINE('没有数据!');
when too_many_rows then
SYS.DBMS_OUTPUT.PUT_LINE('数据过多!');
end;第二过程中调用了第一个过程,第一个过程的第二个参数是inout类型的。
第二个过程中声明了一个变量cur_pric,但没有赋值。在调用第二个过程时,直接当参数传了进去。这里我就不懂了,不给变量赋值也能当参数传给其他过程吗?还是说在没赋值的情况下当成参数传给其他过程时,Oracle会给这个没赋值只声明的变量自动赋个初始值吗?
可我在第一个过程中输出了这个参数的值,以及涉及这个参数的运算结果,可运行后输出的是空的,啥也没有。
我调用第二个过程来运行,也没有出现报错,都正常。
我这里就是不理解,那个cur_pric变量在第一个过程中是如何计算的,居然不报错?
希望各位帮我解惑!!!
下图是我运行后的结果:

我的执行语句是:exec PRODUCT_CLINOUTTYPE_PRC('洗衣机');
...全文
相关推荐
帆软报表Oracle存储过程解决storeParameter1参数试用插件
总结起来,"帆软报表Oracle存储过程解决storeParameter1参数试用插件"主要是针对在调用无参数Oracle存储过程时出现的异常问题提供的一种解决方案。
Mybatis传list参数调用oracle存储过程的解决方法
但是,如何将List类型参数传递给Oracle存储过程,实现批量插入数据却是一个棘手的问题,本文将给大家介绍Mybatis传List参数调用Oracle存储过程的解决方法。
ORACLE存储过程最全教程
通过学习本教程,你将能够熟练地创建、调用和管理Oracle存储过程,解决复杂的业务问题,提升数据库应用的效率和安全性。
oracle存储过程编译错误问题
在开发和维护过程中,我们可能会遇到存储过程编译错误的问题,这通常由多种原因引起。本文将深入探讨可能导致Oracle存储过程编译错误的一些常见原因及解决方案。1.
Spring boot调用Oracle存储过程的两种方式及完整代码
存储过程 PSBC_QUERYBILL,并将参数 pay_ID 传递给存储过程。


