Database 创建表时获取ora-00907缺少右括号错误。数据库新手,don';我不知道是什么';发生什么事了

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

我刚开始学习一门数据库课程,但我遇到了一个错误,我不知道如何识别错误。我得到了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

不少问题,例如

  • 字符串
    在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
不是内置的数据类型,但它是,所以这没问题,但可能有点不寻常