首页 > 解决方案 > 如何捕获错误消息以及如何将错误记录的数据连接到表中

问题描述

我有一个代码作为项目的一部分。该代码验证以下条件。

该代码将验证表中每条记录的所有上述条件。如果任何记录的上述任何验证失败,则该特定记录的状态将更改为“V”并打印错误消息,其中错误消息将显示上述验证失败的条件。

例如:对于特定记录,如果项目编号为空,则特定记录的状态将更新为“V”,错误消息将打印为“项目编号为空,因此状态更新为 V”。

现在我有以下情况可以处理

  1. 使用 sequence_no、error_message 和 error_data 创建表 error_log。
  2. 错误消息将具有实际的错误消息,并且错误数据将具有所有数据的串联值。
  3. 当出现错误时,错误消息应在error_log 表中的error_message 列中捕获,并且error_data 应具有所有列的连接值,即 error_data 应该具有验证失败的记录的列的连接数据。

你能帮我如何捕获error_log表中的错误消息以及如何连接error_message表的error_data列中的错误记录列数据吗

标签: sqloracleplsqlconcatenationerror-messaging

解决方案


您描述的场景最好通过适当的表设计和使用约束来处理,这将始终强制执行这些条件。定义列长度以满足您的要求(5 个字符、240 个字符)或使用 NOT NULL 约束,您将永远不需要这样的过程。如果那不可能,那么请考虑一个简单的INSERT as SELECT命令可以完成您所描述的操作:

insert into error_table 
       (error_date, error_pk, error_message) 
       select sysdate, [data_table.primary_key], 'field A is too long' 
         from data_table where length(field_a) > 5;

对于要检查的每个条件,您都需要一个插入语句。此外,我只会存储每个数据行的主键,而不是所有数据的副本,除非您需要跟踪一段时间内对数据的所有更改。


推荐阅读