首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OUT参数中的sql oracle过程,如何执行

OUT参数中的sql oracle过程,如何执行
EN

Stack Overflow用户
提问于 2014-05-12 09:13:32
回答 1查看 389关注 0票数 0

我的手术是这样的:

代码语言:javascript
复制
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错误的过程。我试着把它执行为:

代码语言:javascript
复制
execute odcitaj_surovinu_zo_skladu(1,200);

但它产生了错误,即“200”不能用作辅助目标。

那么如何执行呢?ODCITAJ需要出去吗?因为我知道,如果它只是IN,那么它将作为常数,我将无法分配它任何东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-12 09:34:18

正如Dmitry所说,必须使用变量作为OUTIN OUT参数的目标,不能提供常量。您的参数确实需要是IN OUT,因为您正在过程中修改它。您可以使用匿名块:

代码语言:javascript
复制
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 可以声明绑定变量。简写包装器,那么:

代码语言:javascript
复制
variable l_odcitaj number;
exec :l_odcitaj := 200;
exec odcitaj_surovinu_zo_skladu(1, :l_odcitaj);

注意,在设置变量名和调用过程时,变量名前面有一个冒号,因为它是一个绑定变量。

如果需要,可以在其他调用中使用更新的绑定变量,或者打印它的后期值:

代码语言:javascript
复制
print l_odcitaj

如果更新后的值--来自odcitaj:=odcitaj-22; --不需要返回,并且仅在过程中使用,则可以将参数声明为IN,并有一个局部变量,该变量由参数设置,然后在过程中操作和使用。

代码语言:javascript
复制
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;
/

然后,可以使用常量值调用该过程。这仅仅取决于调用方是否需要知道修改后的值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23605142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档