Database 创建表时获取ora-00907缺少右括号错误。数据库新手,don';我不知道是什么';发生什么事了
我刚开始学习一门数据库课程,但我遇到了一个错误,我不知道如何识别错误。我得到了ORA-00907缺少右括号的错误,尽管我不认为我遗漏了任何括号 代码如下:Database 创建表时获取ora-00907缺少右括号错误。数据库新手,don';我不知道是什么';发生什么事了,database,oracle,Database,Oracle,我刚开始学习一门数据库课程,但我遇到了一个错误,我不知道如何识别错误。我得到了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 REFERENCE
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
不少问题,例如
在Oracle中是无效的数据类型字符串
- 您正在引用
,其中两列(来自COMMON\u LOOKUP\u LAB
和system\u user\u group\u id
)-是否正确?我创建它只是为了让system\u user\u type
工作,创建一个主键和一个唯一键CREATE SYSTEM\u USER\u 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.
不少问题,例如
在Oracle中是无效的数据类型字符串
- 您正在引用
,其中两列(来自COMMON\u LOOKUP\u LAB
和system\u user\u group\u id
)-是否正确?我创建它只是为了让system\u user\u type
工作,创建一个主键和一个唯一键CREATE SYSTEM\u USER\u 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.
你搞混了
您可以删除内联约束的外键
部分:
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)
);
或切换到线外约束:
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)
,因为前者不是。同样,确保这些尺寸是合理的,我随机选择了10
。而int
不是内置的数据类型,但它是,所以这没什么,但可能有点不寻常。您弄混了
您可以删除内联约束的外键
部分:
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)
);
或切换到线外约束:
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)
,因为前者不是。同样,确保这些尺寸是合理的,我随机选择了10
。而int
不是内置的数据类型,但它是,所以这没问题,但可能有点不寻常