sql - 如何捕获错误消息以及如何将错误记录的数据连接到表中
问题描述
我有一个代码作为项目的一部分。该代码验证以下条件。
- 检查项目编号是否为空
- 检查项目编号的长度是否等于 5 个字符
- 检查项目描述是否为空
- 检查项目描述的长度是否小于 240 个字符。
该代码将验证表中每条记录的所有上述条件。如果任何记录的上述任何验证失败,则该特定记录的状态将更改为“V”并打印错误消息,其中错误消息将显示上述验证失败的条件。
例如:对于特定记录,如果项目编号为空,则特定记录的状态将更新为“V”,错误消息将打印为“项目编号为空,因此状态更新为 V”。
现在我有以下情况可以处理
- 使用 sequence_no、error_message 和 error_data 创建表 error_log。
- 错误消息将具有实际的错误消息,并且错误数据将具有所有数据的串联值。
- 当出现错误时,错误消息应在error_log 表中的error_message 列中捕获,并且error_data 应具有所有列的连接值,即 error_data 应该具有验证失败的记录的列的连接数据。
你能帮我如何捕获error_log表中的错误消息以及如何连接error_message表的error_data列中的错误记录列数据吗
解决方案
您描述的场景最好通过适当的表设计和使用约束来处理,这将始终强制执行这些条件。定义列长度以满足您的要求(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;
对于要检查的每个条件,您都需要一个插入语句。此外,我只会存储每个数据行的主键,而不是所有数据的副本,除非您需要跟踪一段时间内对数据的所有更改。
推荐阅读
- outlook - Outlook 生态系统中的 COM 加载项 EOL
- java - 使用 Spring Boot 连接运行 Postgres 的预先存在的 Docker 容器
- reactjs - React Beautiful DnD 无法将项目拖放到列表底部或视口外部
- android - 创建活动日志
- compiler-construction - 为什么 CISC 指令被认为比 RISC 指令更容易/更快地编译?
- identityserver4 - 是否可以设置我自己的本地 IdentityServer 实例
- vb.net - FormClosing 事件上平板电脑和消息框之间的问题
- azure - ARM 模板部署失败(没有为“/MSDeploy”注册路由)
- python - 如何使用 filedialog.askopenfilename() 从 TkInter Python 3 中的另一种方法获取所选文件的路径
- rust - (tokio::spawn) 借用的值不够长——参数要求为 `'static` 借用 `sleepy`