ORACLE- CASE需要INTO吗?

Jac*_*son 3 sql oracle case pls-00428

当我尝试以下内容时:

declare var_type VARCHAR2(10);

begin

  var_type := 'B';

  select case var_type 
           when 'B' then 'Beans' 
           when 'L' then 'Legumes' 
         end 
    from tableOfBeans ;

end;
Run Code Online (Sandbox Code Playgroud)

我收到一个错误说

ORA-06550:第4行,第1列:
PLS-00428:在此SELECT语句中需要INTO子句
在位置#处检测到错误:62

但是,当我不使用var_type但是使用'B'作为条件时,它可以很好地工作.任何人都可以告诉我为什么会发生这种情况,我该如何解决它以便我可以var_type正常使用?

Ber*_* Dy 5

您已将SQL包装在开始/结束块中,这使其成为PL-SQL语句.在PL-SQL中,Oracle期望从SQL中放置结果集.这是您的ORA-06550错误的来源.您需要声明一个PL-SQL变量来通过INTO保存查询结果.

但SELECT语句仍然有点奇怪.你拥有它的方式,在FROM子句中有一个真正的表"tableOfBeans"是没有意义的.

你想要这样的东西吗?

declare var_type VARCHAR2(10);

begin

    select case tableOfBeans.beanType
               when 'B' then 'Beans'
               when 'L' then 'Legumes'
           end
      into var_type
      from tableOfBeans;

end;
Run Code Online (Sandbox Code Playgroud)

实际上,如果tableOfBeans中有多行,那么也会产生错误.也许你想要的是从tableOfBeans中检索tableOfBeans.beanType = var_type的项目.在这种情况下,您仍然需要一种方法来存储结果集.对不起,如果我不明白你想做什么.更多细节将有所帮助.