我的手术是这样的:
create or replace procedure odcitaj_surovinu_zo_skladu
(
v_id_suroviny IN surovina.id_suroviny%TYPE,
odcitaj IN OUT number
)
as
begin
...//some code here
odcitaj:=odcitaj-22;
...//some code here
end;编译w/o错误的过程。我试着把它执行为:
execute odcitaj_surovinu_zo_skladu(1,200);但它产生了错误,即“200”不能用作辅助目标。
那么如何执行呢?ODCITAJ需要出去吗?因为我知道,如果它只是IN,那么它将作为常数,我将无法分配它任何东西。
发布于 2014-05-12 09:34:18
正如Dmitry所说,必须使用变量作为OUT或IN OUT参数的目标,不能提供常量。您的参数确实需要是IN OUT,因为您正在过程中修改它。您可以使用匿名块:
declare
l_odcitaj number;
begin
l_odcitaj := 200;
odcitaj_surovinu_zo_skladu(1, l_odcitaj);
-- do something with the updated value of l_odcitaj
end;
/如果您想要为匿名块execute使用SQL*Plus/SQL 可以声明绑定变量。简写包装器,那么:
variable l_odcitaj number;
exec :l_odcitaj := 200;
exec odcitaj_surovinu_zo_skladu(1, :l_odcitaj);注意,在设置变量名和调用过程时,变量名前面有一个冒号,因为它是一个绑定变量。
如果需要,可以在其他调用中使用更新的绑定变量,或者打印它的后期值:
print l_odcitaj如果更新后的值--来自odcitaj:=odcitaj-22; --不需要返回,并且仅在过程中使用,则可以将参数声明为IN,并有一个局部变量,该变量由参数设置,然后在过程中操作和使用。
create or replace procedure odcitaj_surovinu_zo_skladu
(
v_id_suroviny IN surovina.id_suroviny%TYPE,
v_odcitaj IN number
)
as
l_odcitaj number;
begin
l_odcitaj := v_odcitaj;
...//some code here
l_odcitaj:=l_odcitaj-22;
...//some code here
end;
/然后,可以使用常量值调用该过程。这仅仅取决于调用方是否需要知道修改后的值。
https://stackoverflow.com/questions/23605142
复制相似问题