标签: error-handling

容器过程中的错误处理

我知道并使用了这个问题中的技术

在我的环境中,我们有很多调用子过程的容器过程,这些过程可能会无限调用其他过程。

就我个人而言,我通常TRY/CATCH在每个级别的程序中使用。这有时会导致多个重复的错误消息,但很清楚发生了什么以及在什么过程中。

我有一些同事采取不同的方法。即: - 让每个存储的 proc 发出一个返回码 - 在执行后评估每个存储的 proc 的返回码 - 如果收到错误的返回码,则在最外层的 proc 中引发错误

我相信他们这样做,所以他们可以从示数程序实际行号(而不是让它返回的行号RAISERRORCATCH块)。

对我来说,这似乎更难实现和维护,但我不是 SQL Server 错误处理方面的专家,所以我想我会在这里提出它。

在处理集装箱程序中的错误时,这两种方法是否有任何实质性优势?

sql-server stored-procedures sql-server-2008-r2 error-handling

6
推荐指数
1
解决办法
2019
查看次数

Postgres 存储函数的自定义错误代码类和编号

我正在 Postgres 11.5 中编写一组存储函数,并且希望RAISE EXCEPTION在不满足各种先决条件时执行此操作。例如null需要一个字符串或者带字符串的空字符串,或者超出范围的整数参数等。

我可以RAISE EXCEPTION提供详细信息、提示和消息...但是错误代码应该使用什么范围?我检查了文档,但没有在这里找到任何指导:

https://www.postgresql.org/docs/11/errcodes-appendix.html

我在 StackOverflow 上搜索,发现几年前有一个类似的问题......但没有明确的答案。

是否有一些块或前缀可以安全或常规地用于从存储的函数/过程返回的自定义错误代码?

postgresql error-handling plpgsql

6
推荐指数
1
解决办法
1748
查看次数

为什么权限错误会导致 XACT_ABORT 设置为 OFF 且 ANSI_WARNINGS 设置为 ON 的事务失败?

考虑以下用户无权执行的 T-SQL SP_TRACE_GENERATEEVENT

SET XACT_ABORT OFF;

SET ANSI_WARNINGS ON;

BEGIN TRANSACTION;

BEGIN TRY
    EXEC SP_TRACE_GENERATEEVENT;
END TRY
BEGIN CATCH
END CATCH;

COMMIT TRANSACTION;
Run Code Online (Sandbox Code Playgroud)

我不希望根据以下文档SET XACT_ABORT收到错误:

当 ANSI_WARNINGS=OFF 时,权限违规会导致事务中止。

但是,我收到以下错误,如 dbfiddle 中所示

消息 3930 级别 16 状态 1 第 11 行 当前事务无法提交,并且无法支持写入日志文件的操作。回滚事务。

消息 3998 级别 16 状态 1 第 1 行 在批处理结束时检测到不可提交的事务。事务被回滚。

除了调用 SP_TRACE_GENERATEEVENT 之外,其他类型的安全问题也可能会发生此问题。例如,我在尝试查询用户无法连接到该数据库的表时看到过它。我没有完整的错误案例列表。

为什么权限错误会导致XACT_ABORTset toOFFANSI_WARNINGSset to 的事务失败ON

sql-server error-handling

6
推荐指数
1
解决办法
647
查看次数

为什么 TRY CATCH 不抑制触发器中的异常

我在表()上有一个触发器,应将数据复制到其他数据库中的另一个(目标)。我正在尝试为数据实现自定义同步过程:我希望目标数据库(表)与源数据库(表)保持同步。我有 300 个表要同步。其中一些具有不同的物理数据结构。由于不同的数据架构和其他限制(实施时间、环境问题...),我无法使用 Sql Server 的标准方法(复制、DTS...)。我的目标是:此触发器不应影响源表中记录的插入、删除、更新。我试过这样的解决方案:

CREATE TRIGGER dbo.MyTrigger
...
   AFTER INSERT
....
BEGIN TRY
     --RAISERROR('Test error', 16, 2)
END TRY
BEGIN CATCH
  -- nothing
END CATCH
Run Code Online (Sandbox Code Playgroud)

我已经插入RAISEERROR来模拟错误。我希望,try/catch抑制该错误并成功插入(删除或更新)记录。别。这是行不通的。我有错误:

触发器执行期间出现错误。批处理已中止,并且用户事务(如果有)已回滚。

是否有可能以这种方式实现我的解决方案。如何捕获并保持(抑制)触发器中的任何错误?

try/catch如果它不起作用,在触发器中使用有什么意义?

trigger sql-server-2008 error-handling

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

ORA-01017: 无效的用户名/密码;登录被拒绝

我遇到了异常情况,无法理解会发生什么。

我正在使用 PL/SQL Developer 8.0.4.1514(我也尝试过 v7,但相同)连接数据库。有时(当我尝试登录时,或者当我打开另一个会话时,或者当我尝试在以前打开的会话中运行查询时)会出现此错误消息

在此处输入图片说明

有时在 3 次尝试后错误解决(每次尝试使用相同的密码),有时需要一次尝试解决...

可能是什么原因?

谢谢 ...

oracle oracle-11g-r2 error-handling

5
推荐指数
1
解决办法
4934
查看次数

sqlcmd -b 不会在出错时退出

我很困惑我应该如何使用 sqlcmd 的 -b 参数。我正在尝试为我的数据库编写简单的自动化脚本,并希望在出现任何错误时停止执行。我正在使用 SQLServer 2008r2。

为了测试,我调用了简单的脚本

sqlcmd -b -i test.sql
Run Code Online (Sandbox Code Playgroud)

test.sql 内容:

PRINT 'test1'; 
RAISERROR ('Error raised', 15, 15);
PRINT 'test2';
Run Code Online (Sandbox Code Playgroud)

我希望在第一次打印后我会看到错误消息并且脚本会停止。但是每次执行第二次打印时,我都会看到以下输出:

test1
消息 50000,级别 18,状态 15,服务器 TOMEK,第 3 行
错误引发
test2

我做错了什么?

sql-server sqlcmd error-handling

5
推荐指数
1
解决办法
3702
查看次数

PostgreSQL UNIQUE 约束错误消息

附录 A:PostgreSQL 错误代码中,它说:

对于某些类型的错误,服务器会报告与错误关联的数据库对象(表、表列、数据类型或约束)的名称;例如,导致 unique_violation 错误的唯一约束的名称。此类名称在错误报告消息的单独字段中提供,以便应用程序无需尝试从消息的可能本地化的人类可读文本中提取它们。

大胆强调我的。我有下表:

CREATE TABLE recipes (
    id SERIAL,
    title TEXT UNIQUE NOT NULL,
    description TEXT NOT NULL,
    instructions TEXT NOT NULL,
    image BYTEA,
    CONSTRAINT recipes_pk PRIMARY KEY(id),
    CONSTRAINT title_unique UNIQUE(title)
);
Run Code Online (Sandbox Code Playgroud)

当我尝试插入具有重复标题的新行时,我在 pgAdmin3 中收到以下错误消息:

ERROR:  duplicate key value violates unique constraint "title_unique"
DETAIL:  Key (title)=(mytitle) already exists.
Run Code Online (Sandbox Code Playgroud)

或者,使用 PHP:

["errorInfo"]=>
  array(3) {
    [0]=>
    string(5) "23505"
    [1]=>
    int(7)
    [2]=>
    string(117) "ERROR:  duplicate key value violates unique constraint "title_unique"
                 DETAIL:  Key (title)=(mytitle) already exists." …
Run Code Online (Sandbox Code Playgroud)

postgresql php error-handling unique-constraint

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

当多行 INSERT 由于几何类型不匹配而失败时,我可以让 PostgreSQL 报告有问题的行吗?

INSERT INTO当其中一些行的 PostGIS 几何类型的值与目标表中相应行的 PostGIS 几何类型不兼容时,使用单个语句将多行插入到表中会失败(如预期的那样):

CREATE EXTENSION postgis;

CREATE TABLE t (
    id integer,
    p geometry(POINT)
);

INSERT INTO t
VALUES
    ( 1, ST_GeometryFromText('Point(0 0)')      ),
    ( 2, ST_GeometryFromText('Point(1 2)')      ),
    ( 3, ST_GeometryFromText('MultiPoint(2 3)') ),
    ( 4, ST_GeometryFromText('Point(5 23)')     ),
    ( 5, ST_GeometryFromText('Point(42 36)')    );
Run Code Online (Sandbox Code Playgroud)

错误消息告诉我们到底出了什么问题:

CREATE EXTENSION postgis;

CREATE TABLE t (
    id integer,
    p geometry(POINT)
);

INSERT INTO t
VALUES
    ( 1, ST_GeometryFromText('Point(0 0)')      ),
    ( 2, ST_GeometryFromText('Point(1 2)')      ),
    ( 3, ST_GeometryFromText('MultiPoint(2 3)') ), …
Run Code Online (Sandbox Code Playgroud)

postgresql insert error-handling postgis

5
推荐指数
1
解决办法
1543
查看次数

SSPI 握手失败,错误代码 0x8009030c,状态 14

描述:SSPI 握手失败,错误代码为 0x8009030c,在建立具有集成安全性的连接时状态 14;连接已关闭。原因:AcceptSecurityContext 失败。Windows 错误代码指示失败的原因。[CLIENT: 10.XXX.XX.XX} ***不同场合客户端地址不同

我可以将此问题提交给我的网络管理员吗?这是网络问题还是sql server问题。除了更改注册表还有其他方法吗?我可以安全地忽略这个错误吗?

security sql-server error-handling alerts error-log

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

“不要使用错误进行流量控制”公理适用于 postgres 吗?

在传统编程中,有一条公理:“不要使用错误进行流程控制”。一个常见的示例是抛出错误然后捕获错误,而不是使用普通的条件语句或break语句。这是有害的,因为应用程序必须展开调用堆栈并调用一些相对昂贵的异常处理逻辑,而不是简单地处理条件语句。

我正在使用 Postgres 系统,其中用户在 Postgres 中调用一个函数,该函数在不满足条件时抛出错误而不是不返回任何行。该条件大致是“此输入值不存在,无事可做”,而不是真正的例外情况。

当以与传统编程类似的方式抛出错误时,Postgres 是否会产生运行时成本?换句话说,在 Postgres 中使用异常作为流量控制对性能有害还是只是草率?

postgresql condition error-handling plpgsql

5
推荐指数
1
解决办法
407
查看次数