This question already has an answer here:
ORA-00907: missing right parenthesis
(1 answer)
Closed 8 years ago.
I tried to create Foreign key and PRIMARY KEY
My code is ok with Table1
CREATE TABLE Persons
(
P_Id int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
Table2:
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int(10),
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
);
error :-ORA-00907: missing right parenthesis
Don't know what the error is.
When you declare the FK "inline" you must not specify the foreign key keyword:
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int(10),
P_Id int REFERENCES Persons(P_Id)
);
Btw: you don't even need to list the column name when using an inline definition, P_Id int REFERENCES Persons would be enough.
That will generate a system-named constraint (e.g. SYS_C0066866), so it's generally better to use a format where you can specify the name of the constraint:
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int(10),
P_Id int,
constraint fk_orders_person foreign key (p_id) REFERENCES Persons(P_Id)
);
If you're inlining your foreign key definition in the column's definition, you don't need the foreign key phrase:
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int(10),
P_Id int REFERENCES Persons(P_Id)
);
For MySql
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int(10),
P_Id int,
FOREIGN KEY(P_Id) REFERENCES Persons(P_Id)
);
For SQL
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int(10),
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
);
Check Manual
Related
create database my_data
create table tblperson(
pid int primary key,
pname varchar(15),
pgender varchar(15)
)
create table tblgender(
gid varchar(15) primary key,
gender varchar(15)
)
Alter table tblperson add constraint giFK
Foreign key (pgender) references tblgender(gid)
CREATE TABLE Countries
(CountryID INT NOT NULL PRIMARY KEY,
CountryName VARCHAR2(100) NOT NULL,
RegionID INT FOREIGN KEY REFERENCES Regions(RegionID)
);
keeps throwing me this:
ORA-00907: missing right parenthesis
What did I do wrong?
The inline foreign key syntax does not take a FOREIGN KEY keyword.
Consider:
CREATE TABLE Countries (
CountryID INT NOT NULL PRIMARY KEY,
CountryName VARCHAR2(100) NOT NULL,
RegionID INT REFERENCES Regions(RegionID)
);
Alternatively, you can declare the foreign key on another line, like so:
CREATE TABLE Countries (
CountryID INT NOT NULL PRIMARY KEY,
CountryName VARCHAR2(100) NOT NULL,
RegionID INT,
CONSTRAINT fkRegionID FOREIGN KEY (RegionID) REFERENCES Regions(RegionID)
);
This works as well:
CREATE TABLE Countries (
CountryID INT NOT NULL PRIMARY KEY,
CountryName VARCHAR2(100) NOT NULL,
RegionID INT,
FOREIGN KEY (RegionID) REFERENCES Regions(RegionID)
);
Demo on DB Fiddle
I am getting an error when i create my tabels.
The problem is that AssCode is not unique, so i can set it to unique, the combination of courseCode and AssCode is unique, thats why they are set as primary keys. I am using postgressql
here is the error:
ERROR: there is no unique constraint matching given keys for referenced table "assignments"
SQL state: 42830
here is my code:
CREATE TABLE Teachers (
BSN int primary key,
Surname varchar(40) NOT NULL,
Name varchar(40) NOT NULL
);
CREATE TABLE Courses (
CourseCode varchar(10) primary key,
Name varchar(20) NOT NULL
);
CREATE TABLE Assignments (
CourseCode varchar(10) REFERENCES Courses ON DELETE CASCADE,
AssCode varchar(10),
primary key(CourseCode,AssCode),
DependOn varchar(10),
Year date,
week int
);
CREATE TABLE WorkOn (
BSN int REFERENCES Teachers(BSN),
CourseCode varchar(10) REFERENCES Assignments(CourseCode),
AssCode varchar(10) REFERENCES Assignments(AssCode),
primary key (CourseCode,BSN,AssCode)
);
I found the answer:
CREATE TABLE WorkOn (
BSN int primary key REFERENCES Teachers(BSN),
CourseCode varchar(10),
AssCode varchar(10),
foreign key (CourseCode, AssCode) references Assignments (CourseCode, AssCode)
);
create table a (
a_id integer,
a_name varchar2(10),
PRIMARY KEY (a_id)
)
create table b(
b_id,
b_name varchar2(10),
a_id integer,
PRIMARY KEY (a_id),
FOREIGN KEY (a_id) REFERENCES a(a_id)
)
If the children have FKs linking them to the parent, then you can use DELETE CASCADE on the parent.
CREATE TABLE book
( book_id int not null,
book_name varchar(50) not null,
CONSTRAINT book_pk PRIMARY KEY (book_id)
);
CREATE TABLE bookdetails
( detail_id int not null,
book_id int not null,
CONSTRAINT fk_book
FOREIGN KEY (book_id)
REFERENCES book(book_id)
ON DELETE CASCADE
);
Complete Procedure as you required just change the tables name in procedure
visit https://anzblog.com/2017/04/29/create-procedure-delete-child-table-data-parent-data-deleted/
It will work for you.As per my understanding.
create table customer(
custno number(10) constraint foo primary key,
custname character(15),
city character(15),
phone number(10));
create table invoice(
invo number(10) constraint inv primary key,
invdate date(10),
constarint c references customer(custno));
I cannot able to create the second table and am having doubt of the data type date and If I neglected that attribute(invdate) still I cannot able to create the second table.Reason please.
create table customer
( custno int constraint foo primary key
,custname character(15)
,city character(15)
,phone int
)
go
create table invoice
( invo int constraint inv primary key
constraint ck references customer(custno)
,invdate date
)