sql >> Databasteknik >  >> RDS >> Oracle

Oracle (ORA-02270):ingen matchande unik eller primär nyckel för detta kolumnlistafel

ORA-2270-felet är ett enkelt logiskt fel:det händer när kolumnerna vi listar i den främmande nyckeln inte matchar en primärnyckel eller unik begränsning på den överordnade tabellen. Vanliga orsaker till detta är

  • föräldern saknar en PRIMÄRNYCKEL eller UNIK begränsning helt och hållet
  • den främmande nyckelsatsen refererar till fel kolumn i den överordnade tabellen
  • den överordnade tabellens begränsning är en sammansatt nyckel och vi har inte refererat till alla kolumner i den främmande nyckelsatsen.

Ingetdera verkar vara fallet i din postade kod. Men det är rött, eftersom din kod körs inte som du har lagt upp det. Att döma av de tidigare redigeringarna antar jag att du inte lägger upp din faktiska kod utan något förenklat exempel. Tyvärr har du i förenklingsprocessen utrotat allt som orsakar ORA-2270-felet.

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> 

Det uttalandet misslyckades eftersom USER är ett reserverat nyckelord så vi kan inte namnge en tabell USER. Låt oss fixa 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> 

Och se! Inget ORA-2270-fel.

Tyvärr, det finns inte mycket vi kan göra här för att hjälpa dig vidare. Du har en bugg i din kod. Du kan posta din kod här och någon av oss kan upptäcka ditt misstag. Eller så kan du kontrollera din egen kod och upptäcka den själv.

Notera:en tidigare version av koden definierade HOB.USERID som VARCHAR2(20). Eftersom USER.ID är definierat som ett NUMBER skulle försöket att skapa en främmande nyckel ha gett ett annat fel:

ORA-02267:kolumntyp inkompatibel med refererad kolumntyp

Ett enkelt sätt att undvika felmatchningar är att använda främmande nyckelsyntax för att standardisera kolumnens datatyp:

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. refererar främmande nyckel alltid till en unik nyckel i en annan tabell?

  2. SQL - Hur transponerar man?

  3. Så här ser du frågehistorik i SQL Server Management Studio

  4. Fjärråtkomst till MySQL-server via SSH-tunnel