首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sqlerrm() vs Sqlcode()

Sqlerrm() vs Sqlcode()
EN

Stack Overflow用户
提问于 2022-02-04 05:54:51
回答 2查看 177关注 0票数 0

因为Sqlerrm()返回由orecle提供的消息和代码。

异常1:类似于在隐式游标中,当数据未找到错误时,我们正在编写异常处理,如dbms_ou.(sqlerrm());

输出: ORA-01403:没有找到数据,Dbms_output.(sqlcode());-当相同的异常时没有找到数据

输出: 100

异常2:当too_many_rows异常发生时将返回

输出:当sqlerrm():ora-01422 :返回的次数超过请求的行数.

输出:当sqlcode():-1422时

因此,在第一种情况下sqlcode()返回100,在too_many_rows中返回-1422 (这是oracle提供的代码)。??

所以这就是我的问题,什么是正确的答案。哪个sqlcode()函数返回由oracle或任何匿名数字提供的大量代码??

EN

回答 2

Stack Overflow用户

发布于 2022-02-04 06:15:04

你所说的没有什么不寻常的,正如 文档中所描述的那样。

对于内部异常,SQLCODE返回关联的Oracle错误数。除非没有找到数据,否则SQLCODE返回的数字为负数,在这种情况下,SQLCODE返回+100。

票数 2
EN

Stack Overflow用户

发布于 2022-02-04 06:49:08

我不知道为什么Oracle曾经决定在SQL代码中将-01403改为+100。不过,这是唯一存在的例外。对于所有异常处理,我们使用以下函数:

代码语言:javascript
复制
FUNCTION get_ora_code(vi_sqlcode INTEGER) RETURN INTEGER IS
BEGIN
 if vi_sqlcode = 100 then
   return -1403;
 else
   return vi_sqlcode;
 end if;
END get_ora_code;

然后,我们的异常处理程序可能如下所示:

代码语言:javascript
复制
EXCEPTION WHEN OTHERS THEN
  vo_msg := regexp_replace(sqlerrm || ' ' || dbms_utility.format_error_backtrace, '[[:space:]]+', ' ');
  v_ora_code := get_ora_code(sqlcode);
  RETURN v_ora_code;
END my_package_function;

因此,在发生错误时,我们的函数总是返回一个负值(并在out变量vo_msg中报告完整的错误消息和堆栈)。我们使用返回代码0表示成功,使用正值表示成功,并使用警告(我们在vo_msg中也对此进行了注释)。我认为这是一个很好的代码约定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70982003

复制
相关文章

相似问题

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