首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >创建表时出现ora-00907缺少右括号错误。数据库新手,不知道是怎么回事

创建表时出现ora-00907缺少右括号错误。数据库新手,不知道是怎么回事
EN

Stack Overflow用户
提问于 2018-09-27 01:09:17
回答 2查看 29关注 0票数 0

我刚开始学习数据库类,我收到了一个错误,我不知道如何识别错误所在。我得到了ORA-00907缺少右括号的错误,尽管我不认为我错过了任何括号。

代码如下:

代码语言:javascript
运行
复制
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
EN

回答 2

Stack Overflow用户

发布于 2018-09-27 01:24:57

相当多的问题,例如

  • string在Oracle
  • 中是无效的数据类型您引用的是COMMON_LOOKUP_LAB,它的两列(来自system_user_group_idsystem_user_type) -是正确的吗?我创建它只是为了让CREATE SYSTEM_USER_LAB工作,创建一个主键和一个唯一键
  • 外键约束看起来可疑

这是我的建议-看看它是如何工作的,如果需要的话,调整它。

代码语言:javascript
运行
复制
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.
票数 1
EN

Stack Overflow用户

发布于 2018-09-27 01:27:56

您正在混淆the syntax for inline and out-of-line constraints

您可以删除内联约束的FOREIGN KEY部分:

代码语言:javascript
运行
复制
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);

或者切换到行外约束:

代码语言:javascript
运行
复制
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。同样,请确保这些大小是合理的,我随机选择了10int不是一种内置数据类型,但它是a supported ANSI SQL type,所以这是可以的,但可能有一点不寻常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52522924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档