2015-06-29 56 views
-1
CREATE TABLE employee 
    (
    empno   INT PRIMARY KEY, 
    ename   VARCHAR(20) NOT NULL, 
    post   VARCHAR (10) NOT NULL, 
    gender  CHAR(1), 
    citizenshipno VARCHAR(10), 
    salary  NUMERIC(10,6) DEFAULT 10000, 
    deptno  INT, 
    CONSTRAINT ck_gender CHECK(gender IN('M','F')), 
    CONSTRAINT uc_citizenshipno UNIQUE(citizenshipno), 
    CONSTRAINT fk_department FOREIGN KEY(deptno) REFERENCE department(deptno) 
) 

它說,丟失的關鍵字...我需要幫助的真快有人錯誤在Oracle中創建表

+0

和它說缺少右括號 –

+0

不要使用意見進一步的信息添加到您的問題 - 相反,使用'edit'按鈕(問題標籤下方),然後添加直接向這個問題提供信息。謝謝。 –

+0

更改參考文獻 –

回答

1

有多個問題:

首先 - 創建一個外鍵時使用REFERENCES,而不是REFERENCE約束。

二 - salary被定義爲numeric(10,6) - 這個餘地只有四個數字的小數點左邊,這樣的10000默認值將不適合在該領域,因爲它有五位數字的左邊小數點。我將此欄的定義更改爲numeric(11,6)

第三 - 使用VARCHAR2而不是VARCHAR。甲骨文公司表示,在某些時候,他們會改變VARCHAR的行爲以符合ANSI的定義,這意味着其行爲將會改變。在此之前(可能發生也可能不發生)使用VARCHAR2

上述所有組合在一起,我們得到:

create table employee 
(empno int primary key, 
    ename varchar2(20) not null, 
    post varchar2(10) not null, 
    gender char(1), 
    citizenshipno varchar2(10), 
    salary numeric(11,6) default 10000, 
    deptno int, 
    constraint ck_gender check(gender in('M','F')), 
    constraint uc_citizenshipno unique(citizenshipno), 
    constraint fk_department foreign key(deptno) 
    references department(deptno)); 

好運。

+0

謝謝男人你救了我......我想問問你的問題,雖然我不能得到默認值的東西,爲什麼它需要(11,6) –

+0

如果有東西被聲明爲'NUMERIC(10 ,6)'你說你希望它能夠保存多達10位有效數字的數字,其中六位數字在小數點的右邊 - 所以可以包含在這個字段中的最大數字是9999.999999,因此10000不會「合適」。通過將字段大小更改爲NUMERIC(11,6),可以存儲的最大可能值變爲99999.999999,因此可以將10000存儲在此字段中。 –

+0

哦,我知道了謝謝你,我的老師給了我錯誤的問題,然後白癡他 –

0

有多個問題與您的CREATE語句:

  • IS NOT NULL

應該NOT NULL

  • REFERENCE

參考關鍵字是錯誤的,它應該是參考

  • VARCHAR data type

更好地利用VARCHAR2。從documentation,

VARCHAR數據類型與VARCHAR2數據類型同義。至 要避免可能的行爲更改,請始終使用VARCHAR2數據類型 來存儲可變長度字符串。

  • NUMERIC(10,6) DEFAULT 10000

指定的精度不正確。它會拋出:

ORA-01438:值大於允許對這種 柱

由於指定的精度時,(10,6)裝置10是精度和6是規模。所以,你可以在之前有4位數字,而你有5位有效數字10000

將其更改爲:

NUMERIC(11,6) DEFAULT 10000