[英]sql missing or invalid option on create table statement
我是SQL的新手,該部分應該只創建幾個表,對嗎? 我看不到任何錯誤,但是Oracle在“ CREATE TABLE Album”行上說了“ missing or invalid option”
CREATE TABLE Profile
(prid INTEGER,
first_name CHAR(20),
last_name CHAR(20),
year_of_birth INTEGER,
month_of_birth CHAR(9),
day_of_birth INTEGER,
gender CHAR(6),
PRIMARY KEY (prid))
CREATE TABLE Album
(aid INTEGER,
visible CHAR(20),
link CHAR(30),
create_time CHAR(30),
mod_time CHAR(30),
name CHAR(30),
owner_prid INTEGER,
PRIMARY KEY (aid),
FOREIGN KEY owner_prid REFERENCES Profile(prid))
cyberkiwi已經回答了您有關語法錯誤的問題。
但是,由於您不熟悉SQL,所以我想對DDL本身進行評論。 特別是,您似乎為許多此類列使用了錯誤的數據類型,這會再次咬住您。
許多Oracle用戶會走得更遠,建議您不要使用CHAR數據類型。 使用CHAR的基本問題是數據空白填充。 因此,如果將單詞“ Male”存儲在GENDER
列中,並且GENDER
是CHAR(6),則Oracle必須在字符串的末尾存儲兩個額外的空格。 這使得將來的比較操作非常危險-您必須確保使用CHAR比較語義而不是VARCHAR比較語義,並且這種做法會變得很丑陋。 此外,您浪費磁盤和內存上的空間來存儲這兩個額外的空間毫無益處。 您所有的CHAR列均應為VARCHAR2
與其YEAR_OF_BIRTH
, MONTH_OF_BIRTH
和DAY_OF_BIRTH
存儲, MONTH_OF_BIRTH
使用一個DATE類型的BIRTH_DATE
列來存儲出生日期,這無疑是更好的選擇。 如果您想了解某人出生的年份,則始終可以提取各種日期成分。 不過,將數據存儲為DATE可以確保日期部分本身有效(例如,沒有錯別字,其中月份被列為“ Febuary”,沒有數據質量問題,月份有時為“ Feb”,有時為“ February”,有時是'2',沒有2月30日的日期,等等。)將數據存儲為DATE可以使優化程序獲得更多的信息,因此更有可能生成最有效的計划,因為它對數據分布有所了解。 您可以使用Oracle提供的所有各種日期函數。
同樣,由於CREATE_TIME
和MOD_TIME
是日期(Oracle DATE始終具有日期和時間成分),因此應將它們存儲為DATE(或TIMESTAMP),而不是VARCHAR2。 這使您可以使用日期(或時間戳記)函數,確保時間有效,消除了將不同格式存儲在同一列中的問題,並且使使用各種日期函數更加容易。
如果使用的是Oracle XE和瀏覽器界面,則不能運行多行語句。 將它們拆分為兩個語句並運行一個,然后清除文本,粘貼另一個,然后再次運行。
您的第二塊應該是
CREATE TABLE Album
(aid INTEGER,
visible CHAR(20),
link CHAR(30),
create_time CHAR(30),
mod_time CHAR(30),
name CHAR(30),
owner_prid INTEGER,
PRIMARY KEY (aid),
FOREIGN KEY (owner_prid) REFERENCES Profile(prid))
即,圍繞構成FK一部分的領域的括號
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.