首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORA-06512和ORA-01403未找到数据

ORA-06512和ORA-01403未找到数据
EN

Stack Overflow用户
提问于 2020-12-11 03:50:43
回答 1查看 473关注 0票数 0

在SQL developer上执行tax_calc_sf函数时,我一直收到以下错误。我也不确定为什么它总是在exits.Any进程后立即断开与数据库的连接,这将不胜感激。

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2020-12-11 04:59:15

在您的 [PL/SQL] 函数的上下文中 –tax_calc2_sfSELECT INTO语句应该准确地返回一行。 如果它没有准确返回一行,您将获得以下predefined exceptions之一

  • NO_DATA_FOUND 如果 SELECT 返回零行
  • TOO_MANY_ROWS 如果 SELECT 返回多于一行

添加exception handler并不能阻止异常的发生,它只允许您执行自定义处理。

所以问问你自己,如果SELECT没有返回任何行,函数tax_calc2_sf应该怎么做。函数应该返回null吗?它应该返回零吗?它应该抛出一个异常吗?

类似地,您需要决定当SELECT返回多个行时该如何处理。

或者,您可以首先执行一个SELECT count(*),它将始终精确返回一行,因此不会抛出任何异常。然后,您可以根据计数是零、一还是多个来决定如何继续。

顺便说一下,当您查询多个数据库表时,建议使用ANSI join syntax

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65241354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档