【问题标题】:ORACLE : Assignment and Checking in same statementORACLE:在同一条语句中分配和检查
【发布时间】: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的一个属性。我还没有对此进行测试,因为我怀疑这不是你想要的。

标签: oracle plsql


【解决方案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;

:)

【讨论】:

    猜你喜欢
    • 2019-07-26
    • 2013-02-10
    • 2023-03-05
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-05
    相关资源
    最近更新 更多