c++ - 顺序文件处理:将数据应用于数据库会导致唯一密钥违规
问题描述
任务是将文件中的数据存储到oracle数据库中。当我们在特定文件夹 ( ${INPUT_DIR}
) 中收到文件时,Autosys 会触发该作业。Autosys 调用一个用 shell 编写的脚本,示例如下所示... shell 脚本在内部调用DatabaseApply.bin
(ProC/C++ 代码),它将文件中存在的数据应用于数据库。该程序将文件名作为输入,如下所示。
for fil_name in `ls ${INPUT_DIR}/INPUT_*`
do
${BIN_DIR}/DatabaseApply.bin $fil_name
#sleep 10 # Sleep added to avoid unique key violation.
.
.
.
done
问题:
当我们收到 2 个具有相同记录(具有相同主键)的文件时,我们得到Unique constraint violation
. 请注意,程序DatabaseApply.bin
会删除数据库中与输入文件中找到的主键对应的记录,然后插入新数据。示例:如果输入文件具有以下数据,第一列作为主键:
ABC, DEF, HIJ,...
然后程序从数据库中删除ABC
数据,然后插入ABC, DEF, HIJ
文件中存在的新数据。
按照逻辑,文件一个接一个地被依次处理(如上面的代码所示)。当我添加时sleep 10
,我们没有得到唯一键违规。
我的感觉是,在数据库提交第一个文件之前,第二个文件也被提交了。
无法弄清楚问题。
注意:这是一个遗留代码ProC/C++
解决方案
推荐阅读
- python - 操作多个大熊猫数据框的快速方法
- database - 关于在猫鼬上进行船舶映射的困惑
- windows - PowerShell脚本删除键盘布局,但重新启动后它们又回来了
- docker-compose - docker-compose:如何停止,删除容器和网络并重新启动
- sql - SQL - 与 case when 和 group by 联合 - 需要帮助
- google-bigquery - 谷歌数据工作室中的条件聚合
- transactions - Java EE 事务
- python - Pygame相对于角色位置的滚动背景非常错误
- fpga - vivado_hls.bat 未找到
- python-3.x - 使用 njit(numba) 时是否可以将 int 转换为数组?