【问题标题】:ORA-01422 - exact fetch returns more than requested number of rows errorORA-01422 - 精确提取返回超过请求的行数错误
【发布时间】:2015-04-09 15:22:32
【问题描述】:

我是编写 PL/SQL 的新手。我有这个小代码,但由于主题错误而无法打印输出。

declare
output_tour_id varchar(4000);

begin
dbms_output.enable;

for r in 
(
SELECT TOUR_ID FROM "/DSD/HH_RADELHD"
VERSIONS BETWEEN TIMESTAMP TO_TIMESTAMP('2015-04-02 18:00:00','YYYY-MM-DD    HH24:MI:SS')
AND TO_TIMESTAMP('2015-04-02 18:30:00','YYYY-MM-DD HH24:MI:SS')
WHERE VERSIONS_OPERATION = 'D'
group by VERSIONS_STARTTIME, CLIENT, TOUR_ID
) 

Loop
@/tmp/get.sql r.tour_id;
DBMS_OUTPUT.PUT_LINE (output_tour_id);
end loop;
end;
/

执行后出现此错误:

old  30: WHERE CLIENT = 100 and TOUR_ID = &1;
new  30: WHERE CLIENT = 100 and TOUR_ID = r.tour_id;
'100','100002039690','000001','0001398563','0050543675','10','C170','20150402070750','CET','1',' ','10',' ','91597','20150330',' ',
declare
*
ERROR at line 1:
ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at line 13

您的意见将不胜感激。提前谢谢你。

如何让我的代码正确执行?

【问题讨论】:

  • 你在哪里填充output_tour_id
  • @mmmmmmmpie,它填充在 get.sql 脚本中;该脚本选择变量output_tour_id
  • 那么你的匿名块是怎么知道output_tour_id的内容的呢?

标签: plsql ora-01422


【解决方案1】:

错误在您的 get.sql 脚本中。您在此脚本中的 SELECT INTO 语句返回超过 1 行。您可以尝试使用SELECT DISTINCT 和/或添加另一个WHERE 条件来限制结果集。

【讨论】:

  • 谢谢@Pavel Gatnar。 get.sql 旨在检索许多行。我认为该变量将存储每一行​​,然后由DBMS_OUTPUT.PUT_LINE (output_tour_id); 显示,然后在下一个循环中使用来自r.tour_id 的新值再次更新。
猜你喜欢
  • 2015-09-24
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
相关资源
最近更新 更多