Search code examples
oracle-databaseforeign-keysconstraintsddl

Still Getting Errors After Applying All I've Read About the Error 02270


I'm creating a couple of Tables for an assignment.

So I created a Gardener Table and an Offering Table, with all the appropriate data types and NULL statuses, as well as the Primary Key constraint for each. In the Gardener table I've included offeringID, and vice versa.

When I try to add Foreign Key constraint offeringID to the Gardener Table I get an error.

After checking online, I realized I had forgotten to make offeringID and gardenerID in each other's tables UNIQUE, hence I altered table to add uniqueness.

Tried adding Foreign Key constraint and I get the same error. I reckon I may be understanding something wrongly, but I can't seem to put my finger on it.

Create Table Gardener
(gardenerID NUMBER(10) NOT NULL,
offeringID NUMBER(10) NOT NULL,
CONSTRAINT gardener_pk PRIMARY KEY(gardenerID)
);

Create Table Offering
(offeringID NUMBER(10) NOT NULL,
gardenerID NUMBER(10) NOT NULL,
CONSTRAINT offering_pk PRIMARY KEY(offeringID)
);

Alter Table Gardener
add CONSTRAINT offering_fk FOREIGN KEY(offeringID)
REFERENCES Offering(offeringID);

Alter Table Gardener
add Unique(offeringID);

Alter Table Offering
add Unique(gardenerID);

This is the error:

ORA-02270: no matching unique or primary key for this column-list
02270. 00000 -  "no matching unique or primary key for this column-list"

Cause: A REFERENCES clause in a CREATE/ALTER TABLE statement gives a column-list 
for which there is no matching unique or primary key constraint in the referenced table.

Like, I still don't get it. Isn't offeringID a Primary Key hence pointing to it from Gardener shouldn't be an issue still?


Solution

  • Since you're trying to add a a foreign key constraint for offering.offeringID column within the Gardener table, whereas that column has no unique/primary key key when you try to add a foreign key. i.e. operation stops at the 3rd command.

    So, just exchange the order of commands as :

    Alter Table Gardener 
    add Unique(offeringID); -- should be prior to the below command
    
    Alter Table Gardener
    add CONSTRAINT offering_fk FOREIGN KEY(offeringID)
    REFERENCES Offering(offeringID);
    

    Demo