[英]ORACLE- CASE requires an INTO?
当我尝试以下内容时:
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;
我收到一个错误说
ORA-06550:第4行第1列:
PLS-00428:此SELECT语句中需要一个INTO子句
在#位置检测到错误:62
但是当我不使用var_type
但是使用'B'作为条件时,它可以很好地工作。 任何人都可以告诉我为什么会发生这种情况,我该如何修复它以便我可以正确使用var_type
?
您已将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;
实际上,如果tableOfBeans中有多行,那么也会产生错误。 也许你想要的是从tableOfBeans中检索tableOfBeans.beanType = var_type的项目。 在这种情况下,您仍然需要一种方法来存储结果集。 对不起,如果我不明白你想做什么。 更多细节将有所帮助。
CASE
声明不需要INTO
。
ORA-6550是 SQL无法编译时的一般错误 。 该错误报告它认为问题是没有INTO
子句,因为它认为您正在尝试执行SELECT INTO语句,如下所示:
SELECT t.column
INTO var_type
FROM tableOfBeans
我没有要进行测试的Oracle安装,但是我经历过Oracle 9i / 10g对CASE语句很奇怪,有时需要你使用END CASE
而不是END
。 END CASE
在此处的Oracle文档中提到 。
通常你会在这种情况下使用DUAL,测试是否设置了变量:
var_type := 'B';
SELECT CASE var_type
WHEN 'B' then 'Beans'
WHEN 'L' then 'Legumes'
END CASE
FROM DUAL;
如前所述,错误表明您必须将select的结果放入变量中。
declare
var_type VARCHAR2(10);
var_into VARCHAR2(10);
begin
var_type := 'B';
select case var_type
when 'B' then 'Beans'
when 'L' then 'Legumes'
end
into var_into
from tableOfBeans;
end;
如果表tableOfBeans包含多行,则会遇到另一个错误ORA-01422:exact fetch返回多行。 使用伪表替代或替代pl / sql代码。
declare
var_type VARCHAR2(10);
var_into VARCHAR2(10);
begin
var_type := 'B';
var_into := case var_type
when 'B' then 'Beans'
when 'L' then 'Legumes'
end;
end;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.