“精确提取返回的行数超过了请求的行数”
Posted
技术标签:
【中文标题】“精确提取返回的行数超过了请求的行数”【英文标题】:"exact fetch returns more than requested number of rows" 【发布时间】:2017-03-28 17:22:03 【问题描述】:我正在开发 Oracle Apex 5,当我尝试使用以下代码为一列运行应用程序时,我收到一条错误消息,提示“精确提取返回的行数超过请求的行数”
DECLARE
Num VARCHAR2(40);
BEGIN
SELECT CONCAT(YEAR, '-')
INTO Num FROM APPS;
END;
【问题讨论】:
试试运行SELECT CONCAT(YEAR, '-') FROM MP_APPLICATIONS
。你会看到它返回不止一行,显然不能放在一个变量中。你想得到任何一个值吗?可能是最大/最小?
【参考方案1】:
变量 terranumber 只能保存一个值。所以,如果你选择查询返回多行,就会抛出这个错误。
如果你想要任何一个值:
declare
terranumber varchar2(40);
begin
select concat(year, '-') into terranumber
from mp_applications
where rownum = 1;
end;
/
也许你想得到max
(或min
)的年度:
declare
terranumber varchar2(40);
begin
select concat(max(year), '-') into terranumber
from mp_applications;
end;
/
或者您可能想一一访问所有值:
begin
for rec in (select concat(year, '-') as year from mp_applications)
loop
-- use rec.year as required
end loop;
end;
/
【讨论】:
当我使用 rownum 时,它只会从被调用的列中获取第一行(在 concat 中)。如何获取列的最新行? (TOP 和 LIMIT 不适用于 Oracle Apex 5) @thelamp 你可以使用 rownum 值:select * from (your select + order by date)where ROWNUM 【参考方案2】:使用 INTO 子句时只能选择一行。通常,您添加 WHERE 子句条件以将返回的数据限制为仅一行。或者课程取决于你想要做什么。
【讨论】:
以上是关于“精确提取返回的行数超过了请求的行数”的主要内容,如果未能解决你的问题,请参考以下文章
尝试从两列中提取多条记录时,精确提取返回的行数超过了请求的行数
获取 ORA-01422 的原因:精确提取返回的行数超过了请求的行数