标签: error-handling

如何中断SQL脚本执行

我正在处理 sql 脚本,如果不满足某些条件,我需要停止继续该脚本。

当我谷歌它时,我发现 20 严重级别的 RaisError 将终止它。但由于某些原因,我不能使用该选项。

请向我提供停止 SQL 脚本执行的可能替代方法。

sql-server-2005 sql-server error-handling

18
推荐指数
3
解决办法
6万
查看次数

在 Postgres 中尝试 catch 等价物

我们在 Postgres 中有一个 try catch 等价物吗?我编写了一些由触发器调用的用户定义函数。我(不想)想忽略错误,以免流程中断。

postgresql error-handling plpgsql postgresql-9.6

17
推荐指数
1
解决办法
3万
查看次数

Oracle PL/SQL 是否有标准的 ASSERT 例程?

我想使用功能上类似于其他语言中的 ASSERT 例程,即构造(无论是过程,语法......)

ASSERT( <condition>, <msg>)
Run Code Online (Sandbox Code Playgroud)

这样,当<condition>传入的第一个参数为 false 时,会引发带有指定<msg>描述性消息的异常。

我知道手工做这件事很简单,但我想知道DBMS 是否提供了标准的。

必须自己编写一个或从 3rdy-party 包中导入一个是不切实际的,因为我需要它对我正在处理的每个项目都是完全可移植和透明的。

oracle error-handling

16
推荐指数
2
解决办法
6323
查看次数

“检测到死锁”真的是一个错误吗?处理完之后我应该压制他们吗?

不久前,我花了噩梦般的几周时间来处理“检测到死锁”并试图找出如何处理它。我最终以这样的方式处理它:我的代码能够检测到它何时发生,然后无限期地重试相同的查询,每次重试之间间隔 50000 微秒,直到它起作用。

也许这是不好的做法,但到​​目前为止(几个月),除了记录“检测到死锁”所谓的“错误”之外,它还没有引起任何问题。

我现在可以通过将“检测到死锁”错误标记为“不重要”来抑制它们,从而不会向我显示,即使它们仍然记录到我的错误日志表中,这是否“可以”?

请不要告诉我“首先避免它们”。这根本不可能。如果您在同一个表/事物上并发(多个进程/脚本实例)工作,它们显然会发生。我花了很长时间试图“将它们编码掉”,但这似乎是不可能的。

显然,因为我问这个问题而不是仅仅添加忽略规则并完成它,所以我确实关心答案/响应。尽管如此,我认为目前还不能确信它们可以完全避免。我并不是说我每小时都会记录数千个记录,而是每天都会记录一些记录,似乎总是在一开始,当我确实有很多并发进程在同一个表/查询上工作时。

postgresql deadlock error-handling error-log

16
推荐指数
1
解决办法
3万
查看次数

SQL Server 中的 ERROR_STATE() 是什么以及如何使用它?

我读到这ERROR_STATE()有助于区分源代码中可能发生相同类型错误的不同状态/位置。但我并不清楚它如何有用。

MSDN 指出:

ERROR_STATE() 返回导致运行 TRY…CATCH 构造的 CATCH 块的错误的状态编号。

如何真正使用它?有人可以举个例子吗,这篇参考文章中提供的那些并不能真正帮助我很好地解释事情?

sql-server-2008 sql-server error-handling

15
推荐指数
2
解决办法
2万
查看次数

使用上下文生成异常

当 PostgreSQL 抛出异常时,有一行“CONTEXT”,如:

    ERROR:  INSERT has more target COLUMNS than expressions
    LINE 3: ...
                                                         ^
    QUERY:  INSERT INTO ...
    CONTEXT:  PL/pgSQL FUNCTION "XXXXX" line 4 at SQL statement
Run Code Online (Sandbox Code Playgroud)

但是当我抛出异常时,这条线不存在。我没有找到如何添加它。

    RAISE EXCEPTION 'blablabla' USING HINT = 'blablablabla';
Run Code Online (Sandbox Code Playgroud)

是否可以将此行添加到我的异常中?

postgresql error-handling plpgsql

13
推荐指数
1
解决办法
4552
查看次数

PostgreSQL 替代 SQL Server 的 `try_cast` 函数

Microsoft SQL Server 有一个我认为非常明智的函数,如果转换不成功,try_cast()它返回一个null,而不是引发错误。

这使得可以使用CASE表达式或 acoalesce来回退。例如:

SELECT coalesce(try_cast(data as int),0);
Run Code Online (Sandbox Code Playgroud)

问题是,PostgreSQL 有没有类似的东西?

提出这个问题是为了填补我知识中的一些空白,但也有一个一般原则,即有些人更喜欢对某些用户错误做出不那么剧烈的反应。null在 SQL 中返回 a比错误更容易。例如SELECT * FROM data WHERE try_cast(value) IS NOT NULL;。根据我的经验,如果有 B 计划,有时可以更好地处理用户错误。

postgresql datatypes error-handling cast

13
推荐指数
2
解决办法
1万
查看次数

如何在 PL/pgSQL 中获取手动引发的异常的异常上下文?

在 Postgres 中,我们使用以下代码获取异常的“堆栈跟踪”:

EXCEPTION WHEN others THEN
    GET STACKED DIAGNOSTICS v_error_stack = PG_EXCEPTION_CONTEXT;
Run Code Online (Sandbox Code Playgroud)

这适用于“自然”异常,但如果我们使用

RAISE EXCEPTION 'This is an error!';
Run Code Online (Sandbox Code Playgroud)

...然后没有堆栈跟踪。根据邮件列表条目,这可能是故意的,尽管我终生无法弄清楚原因。这让我想找出另一种抛出异常的方法,而不是使用RAISE. 我只是错过了一些明显的东西吗?有没有人有这个技巧?我可以让 Postgres 抛出一个包含我选择的字符串的异常,这样我不仅可以在错误消息中获得我的字符串,还可以获得完整的堆栈跟踪吗?

这是一个完整的例子:

CREATE OR REPLACE FUNCTION error_test() RETURNS json AS $$
DECLARE
    v_error_stack text;
BEGIN

    -- Comment this out to see how a "normal" exception will give you the stack trace
    RAISE EXCEPTION 'This exception will not get a stack trace';

    -- This will give a divide by zero error, complete with stack …
Run Code Online (Sandbox Code Playgroud)

postgresql error-handling exception plpgsql postgresql-9.3

11
推荐指数
2
解决办法
2万
查看次数

使用 try/catch 进行动态 SQL 备份命令时如何记录错误详细信息

在使用 try catch 和动态 sql 的存储过程中发出备份命令时,与直接运行备份命令相比,错误消息非常普遍。

在 SP 中尝试/捕获:

    begin try
        execute sp_executesql @sql;  -- a backup command
    end try
    begin catch  
        print ERROR_MESSAGE();  -- save to log, etc.
    end catch
Run Code Online (Sandbox Code Playgroud)

结果是

50000:usp_Backup:117: BACKUP DATABASE 异常终止。

whearea 发出原始命令:

    backup DATABASE someDb to disk...
Run Code Online (Sandbox Code Playgroud)

结果更好的细节:

查找错误 - SQL Server 数据库错误:文件“H:\FolderName\Filename.bak:”112(磁盘空间不足。)发生不可恢复的 I/O 错误。

有没有办法将这些细节捕获到存储过程中的变量中(记录,传回调用者,重试逻辑)?似乎细节正在通过消息通道传递,但我希望它们在 SP 中可用。

sql-server backup error-handling

10
推荐指数
1
解决办法
2万
查看次数

SQL Server 中的批处理中止错误列表

在 SQL Server 中,如果 XACT_ABORT 关闭,则某些错误将终止当前语句(例如,向采用某些参数的存储过程提供不正确数量的参数),而某些错误将中止整个批处理(例如,向存储过程提供参数)不带参数的过程)。[参考]:http : //www.sommarskog.se/error-handling-I.html#scope-abortion

我想知道的是是否有一个明确的列表,列出哪些错误是批量中止,哪些是语句终止。

sql-server transaction error-handling sql-server-2012

10
推荐指数
1
解决办法
2353
查看次数