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)是自定义构造函数的调用,somethingi的一个属性。我还没有对此进行测试,因为我怀疑这不是你想要的。 【参考方案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:在同一条语句中分配和检查的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C 中分配和释放对齐的内存

有没有办法在 SKSpriteNode 中分配和调用变量?

oracle 同时最多执行多少条语句

Oracle中分页查询语句

Oracle中分页查询语句

Oracle中分页语句的写法