sql - 如果插入子记录失败,Oracle 删除父记录
问题描述
我有一个 PL/SQL 问题如下:
我有一个父子表。
使用 PL/SQL LOOPS - 我将记录插入父项,然后将记录插入子项
我的要求如下:
- 如果插入父项失败 - 只需打印错误并继续循环
- 如果已填充父级,但子级失败,则也删除父级。
有什么想法吗?
解决方案
SAVEPOINT
在插入父表之前建立一个。如果子记录失败,则回滚到保存点。
像这样:
BEGIN
FOR (... your source data for parents ... ) LOOP
BEGIN
SAVEPOINT xxcust_pre_insert;
INSERT INTO parent_table...
FOR ( ... your source data for children ...) LOOP
INSERT INTO child_table...
END LOOP;
EXCEPTION
WHEN others THEN
ROLLBACK TO xxcust_pre_insert;
-- Log the error or do whatever else you want. Don't swallow it.
-- Execution will continue with the next parent record to be inserted
END LOOP;
COMMIT; -- optional at this point. May want later, depending on your design
END;
推荐阅读
- sql - 从每个组中获取随机唯一记录
- reactjs - 单击按钮时显示圆形不确定进度
- c# - 如何停止 Task.Run()?
- azure - 无法为 cosmos db 分配 Azure 角色
- nlp - 识别对比两个语料库的短语
- animation - 如何在 bootstrap 4 中应用 bootstrap 3 模态动画过渡效果
- flutter - 从flutter模拟器发送http请求到localhost api/win10
- flutter - 我的目标是每次用户在小吃栏中输入相同的电子邮件时都会做出消息响应,但我得到的是空值
- angular - Angular - 动态 FormArray 中的对象可能为“空”
- opencv-python - 使用opencv python的相机方向