帮我看一个错误“实际返回的行数超出请求的行数”

zhaoyang0405 2009-03-03 01:57:05
CREATE OR REPLACE PROCEDURE CHECK_ONEMINUTEINFO_TOTALVOLUM
(
s_code sh_origin_stock.stockcode%TYPE,
t_time2 sh_origin_stock.stockcode%TYPE
)
IS
scode stock_shanghai_oneminuteinfo.stockcode%TYPE;
t_time1 sh_origin_stock.indicationtime%TYPE;
t_time3 sh_origin_stock.indicationtime%TYPE;
dvolum sh_origin_stock.dealvolum%TYPE;
dvolum1 sh_origin_stock.dealvolum%TYPE;
CURSOR cur_tab
IS
SELECT max(indicationtime) t_time3,max(dealvolum) dvolum
FROM sh_origin_stock
WHERE stockcode=NVL(s_code, stockcode) and indicationtime=NVL(to_date(t_time2,'yyyymmdd hh24miss'),indicationtime)
group by stockcode;

/*
SELECT time t_time,stockcode scode1,newprice nprice,volum vlum,amount amt,maxprice maxpri,
minprice minpri,closeprice closepri,openprice openpri,ratio rat
FROM stock_shanghai_newprice
WHERE stockcode=NVL(s_code, stockcode) and time=NVL(to_date(t_time2,'yyyymmdd hh24miss'),time);
-- and stockcode=000001;*/
BEGIN
FOR each_rec IN cur_tab
LOOP
BEGIN
SELECT distinct stockcode
INTO scode
FROM sh_origin_stock
WHERE stockcode=NVL(s_code, stockcode)
and indicationtime=NVL(to_date(t_time2,'yyyymmdd hh24miss'),indicationtime);
END;
BEGIN
DBMS_OUTPUT.put_line (scode);
SELECT sum(max(distinct(totalvolum)))
INTO dvolum1
FROM stock_shanghai_oneminuteinfo
WHERE stockcode=scode
--AND time=NVL(to_date(t_time2,'yyyymmdd hh24miss'),time)
group by minutecount,stockcode;
--DBMS_OUTPUT.put_line(each_rec.id_1);
--DBMS_OUTPUT.put_line('chang'||dvolum1);
--DBMS_OUTPUT.put_line('feng'||each_rec.dvolum);
IF dvolum1 is null THEN
DBMS_OUTPUT.put_line (s_code||','||each_rec.t_time3||','||'Stock_shanghai_oneminuteinfo not found in the table data!');
ELSE
IF dvolum1 <> each_rec.dvolum THEN
DBMS_OUTPUT.put_line (s_code||','||each_rec.t_time3||','||'Please check the data!');
ELSE
DBMS_OUTPUT.put_line (s_code||','||each_rec.t_time3||','||'Data correctly!');
END IF;
END IF;
EXCEPTION
WHEN TOO_MANY_ROWS THEN
DBMS_OUTPUT.put_line ('too many rows');
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.put_line (s_code||','||each_rec.t_time3||','||'No data found!');
WHEN OTHERS
THEN
DBMS_OUTPUT.PUT_LINE(s_code||','||each_rec.t_time3||','||'Unknown Error!');
END;
END LOOP;
END;

error info:

SQL> exec check_oneminuteinfo_totalvolum('','')
BEGIN check_oneminuteinfo_totalvolum('',''); END;

*
第 1 行出现错误:
ORA-01422: 实际返回的行数超出请求的行数
ORA-06512: 在 "XINHUA.CHECK_ONEMINUTEINFO_TOTALVOLUM", line 29
ORA-06512: 在 line 1
...全文
805 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Alec-Yin 2011-08-19
  • 打赏
  • 举报
回复
同样的问题。查询的时候去掉某一个select对象时,就不会出现这样的问题了。比如select a,b,c from TABLE,这样会有上面的错误,但是select a,c from TABLE,就不会有问题了,为什么呢?
杨1986 2011-07-11
  • 打赏
  • 举报
回复
遇到了同样的问题,
robinhood1214 2009-03-03
  • 打赏
  • 举报
回复
问题是你代码的逻辑和业务逻辑相符吗?29行你期望得到一条记录但得到了多条,说明数据的逻辑你没有分析清楚。
应该分析下:
1、29行的sql的逻辑是否有问题,是否应该是一个只能得到一条记录的sql
2、29行的sql的逻辑没有问题,那你是否少了解了一些逻辑,本应该用循环的地方你没有用
zhaoyang0405 2009-03-03
  • 打赏
  • 举报
回复
那怎么办呢?
wojiaochenglong 2009-03-03
  • 打赏
  • 举报
回复
注意:orcale与sql server的在这点不一样,当你select返回的结果是多行时,如果是sql server会向你的变量赋一个值
但是在orcale中,他会报错,就如同“实际返回的行数超出请求的行数”这样。
zhaoyang0405 2009-03-03
  • 打赏
  • 举报
回复
1534行,大于1的
Raul_Gonzalez 2009-03-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lpc19598188 的回复:]
帮你数到29行的,问题是:

SELECT distinct stockcode
INTO scode
FROM sh_origin_stock
WHERE  stockcode=NVL(s_code, stockcode)
and indicationtime=NVL(to_date(t_time2,'yyyymmdd hh24miss'),indicationtime);

这个语句,返回了多条记录,
而scode只是一个变量,没有办法接收数组


[/Quote]

看看查询条件,使取得的数据唯一
又是违规昵称 2009-03-03
  • 打赏
  • 举报
回复
帮你数到29行的,问题是:

SELECT distinct stockcode
INTO scode
FROM sh_origin_stock
WHERE stockcode=NVL(s_code, stockcode)
and indicationtime=NVL(to_date(t_time2,'yyyymmdd hh24miss'),indicationtime);

这个语句,返回了多条记录,
而scode只是一个变量,没有办法接收数组

wffffc 2009-03-03
  • 打赏
  • 举报
回复
大于1行的话用游标或数组才行
wffffc 2009-03-03
  • 打赏
  • 举报
回复
SELECT distinct stockcode
INTO scode
FROM sh_origin_stock
WHERE stockcode=NVL(s_code, stockcode)
and indicationtime=NVL(to_date(t_time2,'yyyymmdd hh24miss'),indicationtime);
这个返回几行?

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧