ORACLE:在同一条语句中分配和检查
Posted
技术标签:
【中文标题】ORACLE:在同一条语句中分配和检查【英文标题】:ORACLE : Assignment and Checking in same statement 【发布时间】:2019-10-24 18:50:39 【问题描述】:在 Oracle PL/SQL 中,我可以这样做吗:
if ( ( i = a ) = 3 )
即 - 将变量i
设置为a
,然后检查它是否为3
。
谢谢
【问题讨论】:
这将需要在检查之前设置 i 的值。我想要的是设置 i 等于第一个。然后检查是否为 3。 实际上,不,您无法在一个步骤中分配和检查值。你需要一个步骤(我认为这是一种语言中更简洁的方法,你可以在一个步骤中完成这两个步骤)。如果你真的下定了决心,你可以使用一个函数来为 OUT 参数分配一个值并返回该值,但我想不出你想要这样做的情况。 你可以使用对象类型来做一些事情,比如if i(a).something = 3
,其中i(a)
是自定义构造函数的调用,something
是i
的一个属性。我还没有对此进行测试,因为我怀疑这不是你想要的。
【参考方案1】:
set serveroutput on
declare
i number;
j number;
begin
i := 3;
j := 3;
if ( ( i = j ) = 3 ) then
dbms_output.put_line('Success');
else
dbms_output.put_line('No luck');
end if;
end;
所以我尝试了上面的代码,下面是我得到的错误。
PLS-00306: wrong number or types of arguments in call to '='
所以我知道我们不能做赋值和检查是同一个语句。
【讨论】:
( i = j )
返回布尔值 TRUE。因此,您无法与数字进行比较。替代为(( i = j ) = (i = 3))
谢谢@DamithJinasena。你说的对。虽然我不确定 OP 是否想这样解决。
这并没有对 i 进行任何赋值,这是 OP 要求的。这只是进行双重比较。【参考方案2】:
是的,当然:
declare
a number := 3;
i number;
begin
i := a; if i = 3 then dbms_output.put_line('i am so smrt'); end if;
end;
:)
【讨论】:
以上是关于ORACLE:在同一条语句中分配和检查的主要内容,如果未能解决你的问题,请参考以下文章