sql >> Database teknologi >  >> RDS >> Oracle

Oracle (ORA-02270):ingen matchende unikke eller primær nøgle for denne kolonnelistefejl

ORA-2270-fejlen er en ligetil logisk fejl:den sker, når de kolonner, vi angiver i den fremmede nøgle, ikke matcher en primær nøgle eller en unik begrænsning på den overordnede tabel. Almindelige årsager til dette er

  • forælderen mangler helt en PRIMÆR NØGLE eller UNIK begrænsning
  • den fremmede nøgle-sætning refererer til den forkerte kolonne i den overordnede tabel
  • den overordnede tabels begrænsning er en sammensat nøgle, og vi har ikke refereret til alle kolonnerne i den fremmede nøgleudsagn.

Ingen af ​​dem ser ud til at være tilfældet i din postede kode. Men det er en rød sild, for din kode kører ikke som du har lagt det op. At dømme ud fra de tidligere redigeringer antager jeg, at du ikke poster din egentlige kode, men et forenklet eksempel. Desværre har du under forenklingsprocessen udryddet alt det, der forårsager ORA-2270-fejlen.

SQL> CREATE TABLE JOB
 (
   ID       NUMBER NOT NULL ,
   USERID   NUMBER,
   CONSTRAINT B_PK PRIMARY KEY ( ID ) ENABLE
 );  2    3    4    5    6  

Table created.

SQL> CREATE TABLE USER
 (
   ID       NUMBER NOT NULL ,
   CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
 );  2    3    4    5  
CREATE TABLE USER
             *
ERROR at line 1:
ORA-00903: invalid table name


SQL> 

Denne sætning mislykkedes, fordi USER er et reserveret søgeord, så vi kan ikke navngive en tabel USER. Lad os ordne det:

SQL> 1
  1* CREATE TABLE USER
SQL> a s
  1* CREATE TABLE USERs
SQL> l
  1  CREATE TABLE USERs
  2   (
  3     ID       NUMBER NOT NULL ,
  4     CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
  5*  )
SQL> r
  1  CREATE TABLE USERs
  2   (
  3     ID       NUMBER NOT NULL ,
  4     CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
  5*  )

Table created.

SQL> Alter Table JOB ADD CONSTRAINT FK_USERID FOREIGN KEY(USERID) REFERENCES USERS(ID);   

Table altered.

SQL> 

Og se! Ingen ORA-2270 fejl.

Desværre, der er ikke meget, vi kan gøre her for at hjælpe dig videre. Du har en fejl i din kode. Du kan poste din kode her, og en af ​​os kan se din fejl. Eller du kan tjekke din egen kode og finde den selv.

Bemærk:en tidligere version af koden definerede HOB.USERID som VARCHAR2(20). Fordi USER.ID er defineret som et NUMBER, ville forsøget på at oprette en fremmednøgle have givet en anden fejl:

ORA-02267:kolonnetype inkompatibel med refereret kolonnetype

En nem måde at undgå uoverensstemmelser på er at bruge fremmednøglesyntaks til standarddatatypen for kolonnen:

CREATE TABLE USERs
 (
   ID    number NOT NULL ,
   CONSTRAINT U_PK PRIMARY KEY ( ID ) ENABLE
 );

CREATE TABLE JOB
 (
   ID       NUMBER NOT NULL ,
   USERID   constraint FK_USERID references users,
   CONSTRAINT B_PK PRIMARY KEY ( ID ) ENABLE
 );


  1. Indebærer en Postgres UNIQUE begrænsning et indeks?

  2. Opbygning af en simpel webapp med Bottle, SQLAlchemy og Twitter API

  3. Hvordan bruger man MySQLdb med Python og Django i OSX 10.6?

  4. bbPress:Sådan finder du kortlægninger af vedhæftede filer til deres respektive indlæg