我有一个非常奇怪的问题。
我有以下查询:
dbms_output.put_line('Prefix : ' || prefix || 'Vendor ID :' || vendor_id);
select r.rate
into rate
from rates r
where r.quality = 0
and r.vendor_id = vendor_id
and r.prefix = prefix
and r.direction = 'OUT'
and r.calendar_value = 0
and (sysdate-(1/24/60) >= r.effective_date_from
and sysdate-(1/24/60) < nvl(r.effective_date_to, sysdate));
现在rate,vendor_id和prefix是3个变量,所有3个都是数字。
此查询位于存储过程中,在此查询之前,我输出两个vars,打印Prefix : 5 Vendor ID : 361
此查询属于ORA-01422: exact fetch returns more than requested number of rows
问题是,如果我将此查询复制/粘贴到使用5
和361
的过程之外的单独SQL查询,我会得到1行。
有谁知道为什么会发生这种情况?我在使用Oracle 11g
答案 0 :(得分:0)
我敢打赌你的输入中有重复的内容。请考虑以下数据:
create table rates (pk number not null primary key, rate number,
quality number, vendor_id number, prefix number,
direction varchar2(30), calendar_value number,
effective_date_from date, effective_date_to date);
insert into rates values(1, 2, 0, 361, 5, 'OUT', 0,
to_date('2013-04-25 13:40:00', 'YYYY-MM-DD hh24:mi:ss'),
to_date('2013-04-25 13:45:00', 'YYYY-MM-DD hh24:mi:ss'));
insert into rates values(2, 3, 0, 361, 5, 'OUT', 0,
to_date('2013-04-25 13:45:00', 'YYYY-MM-DD hh24:mi:ss'),
to_date('2013-04-25 13:46:00', 'YYYY-MM-DD hh24:mi:ss'));
insert into rates values(3, 4, 0, 361, 5, 'OUT', 0,
to_date('2013-04-25 13:45:30', 'YYYY-MM-DD hh24:mi:ss'),
null);
(注意第2行和第3行之间的重叠)。
根据此数据,您的查询将返回
答案 1 :(得分:0)
嗯,我不知道这是什么问题。
但是将变量prefix
和vendor_id
更改为不同的名称可以解决问题。
可能它以某种方式与使用相同名称或某物的同一用户的不同程序的变量范围有关,不确定。
答案 2 :(得分:0)
表中可能有一行空格,例如。空格不为空,它是一个字符。但是,在程序外部运行查询时,您可能无法在输出中看到它。 如果存在多于一行或者不存在行,则SELECT INTO或隐式游标将始终引发异常。使用显式游标或处理异常。在您的情况下,例外是Too_Many_Rows。