主键违规

时间:2016-01-18 18:34:06

标签: java oracle

以下插入声明无法说明:unique primary key violated ora-0001。你知道它为什么不起作用吗? 主键 seq id

INSERT INTO VITA_TRANSACTION ( VTR_SEQ_ID,VTR_QUELLE_SEQ_ID,VTR_QUELLE,
  VTR_PROVIS_EXPORT_LOG_ID,VTR_DWH_EXPORT_LOG_ID,VTR_SYS_DATE,
  VTR_PROCESSSTATE,VTR_IMEI_NR,VTR_IMEI_ZUORDNUNG,VTR_ZUORDNUNG_DATE,
  VTR_IMEI_KNZ,VTR_SUBSCRIBER_NO,VTR_INSERT_TYPE,VTR_ERFASSUNG_DATUM,
  VTR_VOID_ACTIVATE,VTR_QUELLSYSTEM,VTR_VORGANG,VTR_STORNO,VTR_SALES_PRICE,
  VTR_ARTICLE_NO)
values (SEQ_VITA_TRANSACTION.nextval,418912,'M-ABVK',null,null,sysdate,
  'UM','352523003062648','352523003062648',
  to_date('20160118194708', 'YYYYMMDDhh24miss'),null,32927785,'AK',
  to_date('20160118000000', 'YYYYMMDDhh24miss'),'60000661','Activate',
  'Act','N',2000,'123123')

3 个答案:

答案 0 :(得分:0)

PK违规表示您的表已包含序列正在创建的ID。请尝试检查SEQ_VITA_TRANSACTION.nextvalmax(VTR_SEQ_ID) from VITA_TRANSACTION的值: select 'seq', SEQ_VITA_TRANSACTION.nextval from dual union all select 'tab', max(VTR_SEQ_ID) from VITA_TRANSACTION

答案 1 :(得分:0)

这可能不是您问题的确切答案,但我正在尝试调试您的问题。

ORA-0000

1:违反了唯一约束(string.string)

  

原因:UPDATE或INSERT语句尝试插入重复键。对于在DBMS MAC模式下配置的受信任Oracle,如果重复条目存在于不同级别,您可能会看到此消息。

因此VITA_TRANSACTION表中已存在重复条目。

首先,你应该检索序列的当前值而不增加它

示例

SELECT last_number
  FROM all_sequences
 WHERE sequence_owner = '<sequence owner>'
   AND sequence_name = '<sequence_name>';

有关详情请点击此问题How to retrieve the current value of an oracle sequence without increment it?

然后在VITA_TRANSACTION中进行搜索,其中VTR_SEQ_ID =检索当前值+ 1

我很确定你会得到一行。现在可以通过执行下面的sql来增加序列值。

select SEQ_VITA_TRANSACTION.nextval from dual;

它会将当前序列的值递增1(如果序列为INCREMENT BY 1)。然后尝试再次执行插入查询。

答案 2 :(得分:0)

如果要在表中插入已存在的值,通常会发生主键冲突。因此,您可以检查表 VITA_TRANSACTION 上的下一个序列的记录,即 SEQ_VITA_TRANSACTION.nextval ,您可以使用以下查询:

Select 
   count(*) 
From **VITA_TRANSACTION** 
where 
   VTR_SEQ_ID = **SEQ_VITA_TRANSACTION.nextval**; 

如果上面的查询返回count为1,那么该序列已有记录。然后尝试增加序列值,或者删除记录。这是你的电话。 希望这能回答你的问题。