Perl 合并导致违反唯一约束

Perl 合并导致违反唯一约束,perl,oracle,Perl,Oracle,我有一个类似查询的循环(不同的日期、价格)。无论如何,有时我会遇到错误:违反了唯一约束(QF.IDX\u DPR\u ID)(DBD错误:OCISSTMTEXECUTE)。 唯一约束在由触发器生成的DPR_ID上定义。 有什么线索可以帮我解决吗?循环是用perl编写的。我希望在使用merge时不会出现这种错误,我不知道我做错了什么。 我可以在pl/sql中执行它。该错误仅在循环中发生。时间有问题吗 提前谢谢 问候语 magda我的第一个想法是,序列当前返回的值可能低于表中DPR_ID的最大值。运

我有一个类似查询的循环(不同的日期、价格)。无论如何,有时我会遇到错误:违反了唯一约束(QF.IDX\u DPR\u ID)(DBD错误:OCISSTMTEXECUTE)。 唯一约束在由触发器生成的DPR_ID上定义。 有什么线索可以帮我解决吗?循环是用perl编写的。我希望在使用merge时不会出现这种错误,我不知道我做错了什么。 我可以在pl/sql中执行它。该错误仅在循环中发生。时间有问题吗

提前谢谢 问候语
magda

我的第一个想法是,序列当前返回的值可能低于表中DPR_ID的最大值。运行这些查询以查看:

MERGE INTO dpr d
USING (select 3333 dpr_qot_id, to_date('1-Jun-07', 'DD-MON-RR') dpr_ts
from dual) s
on (s.dpr_ts = d.dpr_ts and s.dpr_qot_id = d.dpr_qot_id)
when not matched then
insert
(DPR_TS,
DPR_OPEN,
DPR_HIGH,
DPR_LOW,
DPR_CLOSE,
DPR_VOLUME,
DPR_QOT_ID)
values
(to_date('1-Jun-07', 'DD-MON-RR'),
920,
941.5,
915,
933.5,
696218,
3333)
WHEN MATCHED THEN
UPDATE
set DPR_OPEN = 920,
DPR_HIGH = 941.5,
DPR_LOW = 915,
DPR_CLOSE = 933.5,
DPR_VOLUME = 696218;
1)从用户\u序列中选择最后一个\u编号
其中序列名称=“”;
2) 从dpr中选择max(dpr\U id)

如果查询1的结果低于查询2的结果,则序列与表不一致,需要修改。

我的第一个想法是,序列当前返回的值可能低于表中DPR_ID的最大值。运行这些查询以查看:

MERGE INTO dpr d
USING (select 3333 dpr_qot_id, to_date('1-Jun-07', 'DD-MON-RR') dpr_ts
from dual) s
on (s.dpr_ts = d.dpr_ts and s.dpr_qot_id = d.dpr_qot_id)
when not matched then
insert
(DPR_TS,
DPR_OPEN,
DPR_HIGH,
DPR_LOW,
DPR_CLOSE,
DPR_VOLUME,
DPR_QOT_ID)
values
(to_date('1-Jun-07', 'DD-MON-RR'),
920,
941.5,
915,
933.5,
696218,
3333)
WHEN MATCHED THEN
UPDATE
set DPR_OPEN = 920,
DPR_HIGH = 941.5,
DPR_LOW = 915,
DPR_CLOSE = 933.5,
DPR_VOLUME = 696218;
1)从用户\u序列中选择最后一个\u编号
其中序列名称=“”;
2) 从dpr中选择max(dpr\U id)

如果查询1的结果低于查询2的结果,则序列与表不一致,需要修改。

请显示用于创建DPR_的触发器请显示用于创建DPR_的触发器,因为序列返回了错误(非唯一)编号。非常感谢你!!没关系。如果您对我的答案感到满意,您可以“接受”我的答案。事实上,这是因为序列返回的编号错误(不是唯一的)。非常感谢你!!没关系。如果你满意的话,你可以“接受”我的答案。