oracle数据库查询报错:ORA-01427: 单行子查询返回多个行

oracle数据库查询报错:ORA-01427: 单行子查询返回多个行,第1张

nvl是一个标量函数,在你的SQL语句中,nvl第一个参数是一个子查询。而该子查询是按日期统计用户登录的次数(group

by

t.riqi),如果查询范围在一天之内,因为t.riqi就是一个值,子查询的结果集中只有一条记录,是没有问题的;而如果查询的日期范围超出1天,且有用户在不同的日期有登录,那么子查询的结果集将会有多个记录。这样,nvl函数的第一个参数就是一个多值的结果集,而不是一个单值的结果集,就发生ORA-01427的错误了。

如果数据库是10g及以上版本,可以使用dbms_utility.format_error_backtrace(),这个函数能够返回错误行,可以套用以下格式:

create or replace procedure prc_test(参数) is

v_no number

begin

select no into v_no from zrp

exception

when others then

dbms_output.put_line('SQL CODE:'||sqlcode||chr(10)||

sqlerrm||chr(10)||

dbms_utility.format_error_backtrace())

end

这样写的好处是,当程序发成异常,呗exception捕获后,就会打印出错误信息及发生错误的行号

productid='0240040001' 中的 productid 是唯一主键么?

如果不是

SELECT productid,productname,productprice,quantity FROM productinfo WHERE productid='0240040001'

会返回多条记录,也就没法存到单一变量中了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9475640.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存