我刚开始学习数据库类,我收到了一个错误,我不知道如何识别错误所在。我得到了ORA-00907缺少右括号的错误,尽管我不认为我错过了任何括号。
代码如下:
SQL> CREATE TABLE SYSTEM_USER_LAB
2 ( SYSTEM_USER_LAB_ID int PRIMARY KEY
3 , SYSTEM_USER_NAME string NOT NULL
4 , SYSTEM_USER_GROUP_ID int FOREIGN KEY REFERENCES
COMMON_LOOKUP_LAB(COMMON_LOOKUP_ID)
5 , SYSTEM_USER_TYPE int FOREIGN KEY REFERENCES
COMMON_LOOKUP_LAB(COMMON_LOOKUP_LAB_ID)
6 , FIRST_NAME string
7 , MIDDLE_NAME string
8 , LAST_NAME string
9 , CREATED_BY int FOREIGN KEY REFERENCES
SYSTEM_USER_LAB(SYSTEM_USER_LAB_ID)
10 , CREATION_DATE DATE NOT NULL
11 , LAST_UPDATED_BY int FOREIGN KEY REFERENCES
SYSTEM_USER_LAB(SYSTEM_USER_LAB_ID)
12 , LAST_UPDATE_DATE DATE NOT NULL);
, SYSTEM_USER_GROUP_ID int FOREIGN KEY REFERENCES
COMMON_LOOKUP_LAB(COMMON_LOOKUP_ID)
*
ERROR at line 4:
ORA-00907: missing right parenthesis发布于 2018-09-27 01:24:57
相当多的问题,例如
string在Oracle COMMON_LOOKUP_LAB,它的两列(来自system_user_group_id和system_user_type) -是正确的吗?我创建它只是为了让CREATE SYSTEM_USER_LAB工作,创建一个主键和一个唯一键这是我的建议-看看它是如何工作的,如果需要的话,调整它。
SQL> create table common_lookup_lab (common_lookup_id int primary key,
2 common_lookup_lab_id int unique);
Table created.
SQL> create table system_user_lab
2 (system_user_lab_id int constraint pk_sul primary key,
3 system_user_name varchar2(30) not null,
4 system_user_group_id int constraint fk_sul_cll1
5 references common_lookup_lab (common_lookup_id),
6 system_user_type int constraint fk_sul_cll2
7 references common_lookup_lab (common_lookup_lab_id),
8 first_name varchar2(20),
9 middle_name varchar2(20),
10 last_name varchar2(20),
11 created_by int constraint fk_sul_sul1
12 references system_user_lab (system_user_lab_id),
13 creation_date date not null,
14 last_updated_by int constraint fk_sul_sul2
15 references system_user_lab (system_user_lab_id),
16 last_update_date date not null
17 );
Table created.发布于 2018-09-27 01:27:56
您正在混淆the syntax for inline and out-of-line constraints。
您可以删除内联约束的FOREIGN KEY部分:
CREATE TABLE SYSTEM_USER_LAB
( SYSTEM_USER_LAB_ID int PRIMARY KEY
, SYSTEM_USER_NAME varchar2(10) NOT NULL
, SYSTEM_USER_GROUP_ID int REFERENCES COMMON_LOOKUP_LAB(COMMON_LOOKUP_ID)
, SYSTEM_USER_TYPE int REFERENCES COMMON_LOOKUP_LAB(COMMON_LOOKUP_LAB_ID)
, FIRST_NAME varchar2(10)
, MIDDLE_NAME varchar2(10)
, LAST_NAME varchar2(10)
, CREATED_BY int REFERENCES SYSTEM_USER_LAB(SYSTEM_USER_LAB_ID)
, CREATION_DATE DATE NOT NULL
, LAST_UPDATED_BY int REFERENCES SYSTEM_USER_LAB(SYSTEM_USER_LAB_ID)
, LAST_UPDATE_DATE DATE NOT NULL);或者切换到行外约束:
CREATE TABLE SYSTEM_USER_LAB
( SYSTEM_USER_LAB_ID int PRIMARY KEY
, SYSTEM_USER_NAME varchar2(10) NOT NULL
, SYSTEM_USER_GROUP_ID int
, SYSTEM_USER_TYPE int
, FIRST_NAME varchar2(10)
, MIDDLE_NAME varchar2(10)
, LAST_NAME varchar2(10)
, CREATED_BY int
, CREATION_DATE DATE NOT NULL
, LAST_UPDATED_BY int
, LAST_UPDATE_DATE DATE NOT NULL
, CONSTRAINT FK_1 FOREIGN KEY (SYSTEM_USER_GROUP_ID)
REFERENCES COMMON_LOOKUP_LAB(COMMON_LOOKUP_ID)
, CONSTRAINT FK_2 FOREIGN KEY (SYSTEM_USER_TYPE)
REFERENCES COMMON_LOOKUP_LAB(COMMON_LOOKUP_LAB_ID)
, CONSTRAINT FK_3 FOREIGN KEY (CREATED_BY)
REFERENCES SYSTEM_USER_LAB(SYSTEM_USER_LAB_ID)
, CONSTRAINT FK_4 FOREIGN KEY (LAST_UPDATED_BY)
REFERENCES SYSTEM_USER_LAB(SYSTEM_USER_LAB_ID)
);显然,为这些约束选择比我更好的名称,并且对于两个版本,请确保它们在父表中引用了正确的内容。
我还将string更改为varchar2(10),因为前者不是a valid data type。同样,请确保这些大小是合理的,我随机选择了10。int不是一种内置数据类型,但它是a supported ANSI SQL type,所以这是可以的,但可能有一点不寻常。
https://stackoverflow.com/questions/52522924
复制相似问题