【问题标题】:Oracle - If variable is nullOracle - 如果变量为空
【发布时间】:2018-08-02 04:22:59
【问题描述】:

当我的变量匹配字符串时,我需要返回一些虚拟选择。这是我尝试过的:

begin
  if :someVar = 'Yes' then
  select 1 from dual;

  end if;
end;
/

我尝试为 INTO 子句声明一个变量,但我总是收到错误“PLS-00103:在预期以下之一时遇到符号“文件结尾”..” .

有人可以显示我应该更改什么以获得所需的选择吗?我是 Oracle 的初学者,我需要这个用于 SSRS 报告,用于设置参数默认值(基于另一个参数 - 在我的问题中是 someVar)。

【问题讨论】:

  • 我不确定您所说的 return some dummy select 是什么意思。你需要return a cursor,还是返回一个变量的值,或者只是设置一个宿主变量的值,例如if :x = 'Y' then :z := 123;?

标签: oracle reporting-services plsql oracle11g


【解决方案1】:

你必须添加一个into :<variable>

begin
  if :someVar = 'Yes' then
    select 1 into :var from dual;

  end if;
end;
/

:var 应该是你在 ssrs 中的变量

【讨论】:

  • 感谢您的即时答复,但这会产生与 Toad 中描述的相同的错误。还有什么问题?
  • 你怎么称呼那个块?我在数据库中执行它没有错误
  • @谢谢,这确实是问题所在。但是看起来 SSRS 报告仍然无法使用这种语法,所以我还没有解决任何问题。
  • @Lucy82 尝试将 someVar 替换为 :someVar 和 x 替换为 :NameofYourVariable
  • 不,这行不通。而且我无法在 SSRS for Oracle 中找到如何做到这一点。
【解决方案2】:

您不需要IF 语句,而是在DUMMY SELECT 中使用DECODE 语句,如下面的代码所示(您的第二个参数似乎是一个整数,如0 / 1 ) :

begin
  select decode(:someVar,'Yes',1,0) into :someVar2 from dual;
end;
/

【讨论】:

    【解决方案3】:

    为什么要涉及SELECTDUAL?不会很简单

    :someVar2 := case when :someVar = 'Yes' then 1
                      else 0
                 end;
    

    做吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-15
      • 1970-01-01
      • 2013-08-02
      • 2018-12-31
      • 1970-01-01
      • 2012-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多