[oracle]在 PL/SQL 中,如果运营商

标签: Oracle
发布时间: 2017/4/15 18:22:52
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我想做 (在 PL/SQL)

if ((var1, var2) in ( select number1, number2 from.......) ) then
....
end if;

这为什么不工作? 怎么会做正确的事呢?

解决方法 1:

答案是你要读的在 PL/SQL ( select ) 东西到变量中,然后使用它在 IF 语句。你可以这样做,以各种方式,但你不能这样内 IF 子句。Chorel 的答案是对此非常有创造性,他还是有值得称赞的答案。

你也只是能做

declare
  l_count number;
  var1 number := 1; -- or whatever the number
  var2 number := 2;
begin
  select count(*) 
    into l_count
    from mytable
   where number1 = var1 and number2 = var2;
  if l_count > 0 then
     ... the row exists
  end if;
end;

但下面不工作

if (select count(*) from mytable where (number1,number2) in (1,2)) > 0 then -- WRONG
    ...
end if;

如果您想要使用 in 功能你必须诉诸表dual

   where (number1, number2) in (select var1, var2 from dual);

喜欢这个

declare
  l_count number;
  var1 number := 1; -- or whatever the number
  var2 number := 2;
begin
  select count(*) 
    into l_count
    from mytable
   where (number1, number2) in (select var1, var2 from dual);
  if l_count > 0 then
     ...
  end if;
end;
赞助商