在SQL developer上执行tax_calc_sf函数时,我一直收到以下错误。我也不确定为什么它总是在exits.Any进程后立即断开与数据库的连接,这将不胜感激。
CREATE OR REPLACE FUNCTION tax_calc2_sf
(p_id NUMBER,
p_sub NUMBER)
RETURN NUMBER
IS
lv_tax_num NUMBER(5,2) :=0;
BEGIN
SELECT p_sub*t.taxrate tax
INTO lv_tax_num
FROM bb_basket b, bb_tax t
WHERE b.shipstate = t.state
AND b.idBasket = p_id;
RETURN lv_tax_num;
END;我尝试添加一个异常块,如下所示,但这不会改变任何事情,但上图中显示的相同错误仍然重复。enter image description here
发布于 2020-12-11 04:59:15
在您的 [PL/SQL] 函数的上下文中 –tax_calc2_sf– SELECT INTO语句应该准确地返回一行。 如果它没有准确返回一行,您将获得以下predefined exceptions之一
添加exception handler并不能阻止异常的发生,它只允许您执行自定义处理。
所以问问你自己,如果SELECT没有返回任何行,函数tax_calc2_sf应该怎么做。函数应该返回null吗?它应该返回零吗?它应该抛出一个异常吗?
类似地,您需要决定当SELECT返回多个行时该如何处理。
或者,您可以首先执行一个SELECT count(*),它将始终精确返回一行,因此不会抛出任何异常。然后,您可以根据计数是零、一还是多个来决定如何继续。
顺便说一下,当您查询多个数据库表时,建议使用ANSI join syntax。
SELECT p_sub*t.taxrate tax
INTO lv_tax_num
FROM bb_basket b
JOIN bb_tax t
ON b.shipstate = t.state
WHERE b.idBasket = p_id;https://stackoverflow.com/questions/65241354
复制相似问题