Search code examples
oracle-databaseforeign-keysconstraintsddlora-01735

Adding a foreign key to existing table


I have been trying to add these keys to my table but I get an error

ORA-01735: invalid ALTER TABLE option

My code:

ALTER TABLE Room
ADD FOREIGN KEY (RoomType_ID) REFERENCES RoomType(RoomType_ID), 
ADD FOREIGN KEY (Reservation_ID) REFERENCES Reservation(Reservation_ID), 
ADD FOREIGN KEY (Gust_ID) REFERENCES Gust(Gust_ID);

Tables

CREATE TABLE Gust ( Gust_ID INT NOT NULL PRIMARY KEY, First_Name VARCHAR(50), Last_Name VARCHAR(50), Email VARCHAR(20), phone_number INT(10), Address VARCHAR(30) )

CREATE TABLE Reservation ( Reservation_ID INT NOT NULL PRIMARY KEY, Start_Date Date, End_Date Date )

CREATE TABLE Room ( Room_ID INT NOT NULL PRIMARY KEY, Price INT )

CREATE TABLE RoomType ( RoomType_ID INT NOT NULL PRIMARY KEY, Class VARCHAR(10), ExtraPrice INT )

Solution

  • ALTER statement for a multiple FOREIGN KEYS does not work.

    Each CONSTRAINT should be added individually :

    CREATE TABLE Gust ( Gust_ID INT PRIMARY KEY, First_Name VARCHAR(50), Last_Name VARCHAR(50), Email VARCHAR(20), phone_number INT, Address VARCHAR(30) );
    CREATE TABLE Reservation ( Reservation_ID INT PRIMARY KEY, Start_Date Date, End_Date Date );
    CREATE TABLE RoomType ( RoomType_ID INT NOT NULL PRIMARY KEY, Class VARCHAR(10), ExtraPrice INT );
    
    CREATE TABLE Room(Room_ID int PRIMARY KEY, Price INT, Reservation_ID int,Gust_ID int );
    
    ALTER TABLE Room ADD FOREIGN KEY (Room_ID) REFERENCES RoomType(RoomType_ID);
    
    ALTER TABLE Room ADD FOREIGN KEY (Reservation_ID) REFERENCES Reservation(Reservation_ID); 
    -- the table Room is assumed to have a column Reservation_ID 
    
    ALTER TABLE Room ADD FOREIGN KEY (Gust_ID) REFERENCES Gust(Gust_ID);
        -- the table Room is assumed to have a column Gust_ID
    

    If System-generated constraint name not to be wanted, then using these ;

    ALTER TABLE Room ADD CONSTRAINT fk_RoomType_ID FOREIGN KEY (Room_ID) 
                                                   REFERENCES RoomType(RoomType_ID);
    
    ALTER TABLE Room ADD CONSTRAINT fk_Reservation_ID FOREIGN KEY (Reservation_ID) 
                                                    REFERENCES Reservation(Reservation_ID); 
    
    ALTER TABLE Room ADD CONSTRAINT fk_Gust_ID FOREIGN KEY (Gust_ID) 
                                               REFERENCES Gust(Gust_ID);
    

    may be preferred.

    P.S. :

    • Do Not Use NOT NULL with PRIMARY KEY, PRIMARY KEY already includes NOT NULL.
    • The length can not be defined for an INT column.