【问题标题】:List of possible Exceptions per SQL-Command每个 SQL 命令的可能异常列表
【发布时间】:2016-08-07 00:43:36
【问题描述】:

我正在寻找每个 SQL 命令可能发生的所有可能异常的列表。 例如:如果我有以下代码:

Procedure p1
as
  l_cnt number;
Begin
  Select count(*)
    Into l_cnt
    From xyz;
Exceptions
  When ... Then
    ...
End;

现在我想知道这个 Select Into 语句中会出现哪个异常。我知道一些,但它们是全部吗?这就是为什么我正在寻找每个 SQL 可能的异常的概述。

最重要的问题是:是否建议在 PLSQL 中捕获 SQL 代码引发的所有可能的异常? 我知道“当其他人”,这是我 atm 捕捉“未知”异常的唯一方法。 当然,如果 SQL 的可能异常列表很长,我只会处理相关的异常并通过“当其他人”来捕获其他人。

【问题讨论】:

  • @MitchWheat,未知表,列等
  • @jarlh:如果表不存在,则无法编译过程,如果在创建过程后删除表,则过程无效,无法执行。跨度>
  • 我的评论是关于选择是否会引发错误。回答“选择如何引发错误?”。
  • 好吧,也许 Select count 不是最好的例子,但你正在争论可能发生的错误这一事实证明了我的观点。每个 SQL 的异常列表会很棒!
  • @jarlh:缺少表或列不是执行错误。

标签: sql oracle exception plsql


【解决方案1】:

说实话,你的问题很常见。

例如,您的查询可能会导致以下异常:

  • TIMEOUT_ON_RESOURCE - 数据库等待资源时发生超时
  • STORAGE_ERROR - PL/SQL 内存不足或内存已损坏

我建议从official documentation 学习预定义异常并选择适合每种情况的。

【讨论】:

  • 我知道这份清单。但不是每个声明都可能出现提到的每个异常,对吗?那么我如何过滤到例如选择进入哪个应该让我列出你列出的那些。
  • 对于你的例子,我不会使用特定的 exaptions No_data_found 和 to_many_rows 是最常用的 Rarly - %_cursor、index_dub_value、invalid number、zero_devide
  • 其他,只能在非常特殊的情况下使用。
猜你喜欢
  • 1970-01-01
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 2012-12-16
  • 1970-01-01
相关资源
最近更新 更多