2012-10-08 41 views
6

我是新來甲骨文, 我已經創建使用以下查詢兩個表,ORA-00907:缺少右括號創建表時出錯?

CREATE TABLE employee 
(
emp_name VARCHAR(20) NOT NULL, 
street VARCHAR(50) NOT NULL, 
city VARCHAR(20) NOT NULL, 
PRIMARY KEY(emp_name) 
) 

CREATE TABLE company 
(
comp_name VARCHAR(20) NOT NULL, 
city VARCHAR(20) NOT NULL, 
PRIMARY KEY(comp_name) 
) 

現在我嘗試使用一些外鍵創建另一個表,

CREATE TABLE works 
(
emp_name varchar(20) NOT NULL, 
comp_name varchar(20) NOT NULL, 
salary int(10) NOT NULL, 
FOREIGN KEY(emp_name) REFERENCES employee(emp_name), 
FOREIGN KEY(comp_name) REFERENCES company(comp_name) 
) 

錯誤:ORA-00907:缺少右括號

我也試圖與

CREATE TABLE works 
(
emp_name varchar(20) NOT NULL, 
comp_name varchar(20) NOT NULL, 
salary int(10) NOT NULL, 
constraint wemployee FOREIGN KEY(emp_name) REFERENCES employee(emp_name), 
constraint wcompany FOREIGN KEY(comp_name) REFERENCES company(comp_name) 
) 

但是,讓同樣的錯誤。 任何人都可以告訴我,我在哪裏犯錯?

回答

3

我不是oracle中的專家,但是你允許在salary int(10) NOT NULL中指定(10)嗎?

+0

明白了!謝謝:) @pilotcam – Nina

1

在創建與創建表語句的其餘部分指標直列嘗試丟棄FOREIGN KEY部分:

CREATE TABLE works 
(
emp_name varchar(20) NOT NULL, 
comp_name varchar(20) NOT NULL, 
salary int(10) NOT NULL, 
emp_name REFERENCES employee(emp_name), 
comp_name REFERENCES company(comp_name) 
) 

詳情請參見這個問題:

ORA-00907: missing right parenthesis

+0

得到相同的錯誤!無論如何,謝謝。 從Pilotcam得到答案。 – Nina

1

看這裏有兩種不同的方式來創建與consizants表。

1) 創建表部( DEPTNO數(5)主鍵, DEPTNAME VARCHAR2(30), EMPNO數目(5)的引用EMP(EMPNO));

2)創建表部( DEPTNO號碼(5), DEPTNAME VARCHAR2(30), EMPNO號碼(5), 約束pkey_deptno主鍵(DEPTNO) 約束fkey_empno外鍵(EMPNO)引用的Emp (EMPNO));

2

1:你應該有一個名爲「測試」的表,包含兩列id和testdata。 (這僅僅是一個愚蠢的簡單的例子,所以我不會打擾到指定的ID任何約束。)

create table test (id number, testdata varchar2(255)); 

2:接下來,我們將創建一個用於在我們的測試表中的ID號的序列。

create sequence test_seq 
start with 1 
increment by 1 
nomaxvalue; 

你可以改變「從1開始」您要開始與任意數量(例如,如果你已經有一個表213項,要開始使用此爲您的第214項,與「開始取代與214「)。 「按1增量」子句是默認值,因此您可以忽略它。如果您希望它在ID號碼之間跳過n-1個數字,您也可以用「增加n」代替它。 「nomaxvalue」告訴它永遠不斷增加,而不是在某個時候重新設置.i(我相信Oracle對它有多大的限制有一些限制,但我不知道這個限制是什麼)。

3:現在我們準備創建觸發器,它會自動將序列中的下一個數字插入到id列中。

create trigger test_trigger 
before insert on test 
for each row beginselect test_seq.nextval into :new.id from dual; 
end; 
/