[Oracle] Unique constraint violated*

Pagina: 1
Acties:

  • Sn0rkel
  • Registratie: Februari 2003
  • Laatst online: 25-06-2025
Hoi,

Aangezien ik niets kan vinden en ook geen idee heb waar ik nu precies nog kan zoeken het volgende probleem:

Ik heb een tabel met een primary key over meerdere velden:

code:
1
2
3
4
5
6
7
8
CREATE TABLE menu_content
    (    menuid VARCHAR2(40) NOT NULL,
         field VARCHAR2(40) NOT NULL,
         lang VARCHAR2(40) NOT NULL,
         device VARCHAR2(40) NOT NULL,
         value VARCHAR2(4000),
         CONSTRAINT menu_content_pkey PRIMARY KEY (menuid, field, lang, device)
    );

Als ik deze creëer en dan de volgende data invoer:
code:
1
2
3
4
INSERT INTO menu_content VALUES (0, 'description', 'nl-NL', 'mul', 'Welkom!');
INSERT INTO menu_content VALUES (0, 'item_1_link', 'nl-NL', 'mul', 'menu8');
INSERT INTO menu_content VALUES (0, 'item_1_text', 'nl-NL', 'mul', 'Autos');
INSERT INTO menu_content VALUES (0, 'template', 'nl-NL', 'mul', 'toplevel');

Krijg ik als error:
code:
1
2
3
4
INSERT INTO menu_content VALUES (0, 'template', 'nl-NL', 'mul', 'toplevel')
*
ERROR AT line 1:
ORA-00001: unique constraint (system.menu_content_pkey) violated


Maar dit kan toch niet omdat de records over de constraint-velden uniek zijn? Ik snap er helemaal niets van! Alle waardes over de 'field' kolom zijn überhaupt al uniek!

  • x-force
  • Registratie: Maart 2001
  • Laatst online: 05-01-2024
Waarom zet je menuid elke keer als '0' ?

[ Voor 25% gewijzigd door x-force op 15-05-2006 12:25 ]

VangenopBetaalwater.nl Het platform om ervaringen over betaalwater in Frankrijk te delen met andere karpervissers zodat iedereen kan vangen op betaalwater!


  • Sn0rkel
  • Registratie: Februari 2003
  • Laatst online: 25-06-2025
das even niet een issue hier :P hoewel er nog wel records met andere id's komen, ik heb gemerkt dat de error komt door het plaatsen van een '/' ergens in het centrale script nog wat dus dit commando dubbel uitvoert omdat het het voorlaatste commando was. Wat wel raar is dat een trigger die ik ergens anders heb aangemaakt wél een '/' nodig heeft voordat deze wordt uitgevoerd (met een ';' ) krijg ik errors. Maar goed, dat zoek ik nog wel even uit (tenzij iemand snel het antwoord weet?)

[ Voor 10% gewijzigd door Sn0rkel op 15-05-2006 12:30 ]


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 00:22

Janoz

Moderator Devschuur®

!litemod

Nu je toch je tabeldefinitie hier hebt nergezet, warom is alles een varchar? Daarnaast lijkt het model nog niet echt (eigenlijk echt niet) genormaliseerd.

Tot slot ben je ook vergeten een fatsoenlijke topic titel op te geven (kun je middels een topic report doorgeven Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/tweakers/images/icons/icon_hand.gif )

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Nou, Oracle zal het wel bij het rechte einde hebben. Je hebt ongetwijfeld gewoon al data in die tabel, want bij mij werkt alles prima.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
SQL*Plus: Release 9.2.0.1.0 - Production on Mon May 15 12:54:50 2006

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


Connected to:
Oracle9i Release 9.2.0.1.0 - Production
JServer Release 9.2.0.1.0 - Production

SQL> CREATE TABLE menu_content
  2      (    menuid VARCHAR2(40) NOT NULL,
  3           field VARCHAR2(40) NOT NULL,
  4           lang VARCHAR2(40) NOT NULL,
  5           device VARCHAR2(40) NOT NULL,
  6           value VARCHAR2(4000),
  7           CONSTRAINT menu_content_pkey PRIMARY KEY (menuid, field, lang, device)
  8      );

Table created.

SQL> INSERT INTO menu_content VALUES (0, 'description', 'nl-NL', 'mul', 'Welkom!');

1 row created.

SQL> INSERT INTO menu_content VALUES (0, 'item_1_link', 'nl-NL', 'mul', 'menu8');

1 row created.

SQL> INSERT INTO menu_content VALUES (0, 'item_1_text', 'nl-NL', 'mul', 'Autos');

1 row created.

SQL> INSERT INTO menu_content VALUES (0, 'template', 'nl-NL', 'mul', 'toplevel');

1 row created.

SQL>

Siditamentis astuentis pactum.


  • hamsteg
  • Registratie: Mei 2003
  • Laatst online: 21-02 23:01

hamsteg

Species 5618

Als je aan het testen bent, drop dan wel eerst je data bij een retest :P (fout maak ik ook nog steeds, gelukkig ben ik nu getriggered by unique id errors).

Niet quoten, zorgvuldige reacties volgens de regels worden zo weggewerkt: *knip*, reactie op geknipte reactie.


Verwijderd

ik denk dat hij per ongeluk al een keer een insert heeft gedaan en nu probeert het record nog een keer te inserten... doe eerst maar eens een
code:
1
TRUNCATE table menu_content;


oid en draai het script dan nog een keer :)

  • The Fox NL
  • Registratie: Oktober 2004
  • Laatst online: 14-02 22:37
Sn0rkel schreef op maandag 15 mei 2006 @ 12:29:
das even niet een issue hier :P hoewel er nog wel records met andere id's komen, ik heb gemerkt dat de error komt door het plaatsen van een '/' ergens in het centrale script nog wat dus dit commando dubbel uitvoert omdat het het voorlaatste commando was. Wat wel raar is dat een trigger die ik ergens anders heb aangemaakt wél een '/' nodig heeft voordat deze wordt uitgevoerd (met een ';' ) krijg ik errors. Maar goed, dat zoek ik nog wel even uit (tenzij iemand snel het antwoord weet?)
Dan zal het daaraan wel liggen. Want als het maar 1 keer wordt uitgevoerd krijg je die error niet. Je voert het commando dus 2x uit.
Die / is nodig bij aanmaken van triggers, packages en package bodies. Bij een insert statement zorgt ie ervoor dat een commando opnieuw wordt uitgevoerd.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
SQL> insert into blaat (aa) values (1);

1 row created.

SQL> /

1 row created.

SQL> create or replace trigger trg_blaat_bi
  2  before insert on blaat
  3  for each row
  4  begin
  5    aa := 1;
  6  end;
  7  /

Warning: Trigger created with compilation errors.

SQL>

[ Voor 12% gewijzigd door The Fox NL op 15-05-2006 14:47 . Reden: create trigger toegevoegd ]

Pagina: 1