缺少的括号在哪里?

zsbz8rwp  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(349)

我试图学习sql数据库,但我似乎无法理解这里的问题在哪里,我不断被告知缺少右括号。如果有人能指出问题所在(我正在开发oracle 11g xe),我将不胜感激:

create table emp_copy
employee_id NUMBER(6)
CONSTRAINT emp_employee_id PRIMARY KEY, first_name VARCHAR2(20)
, last_name VARCHAR2(25) CONSTRAINT emp_lname_nn NOT NULL
, email VARCHAR2(25) CONSTRAINT emp_mail NOT NULL
CONSTRAINT emp_mail_uk UNIQUE
, phone_number VARCHAR2(20)
, hire_date DATE default sysdate
CONSTRAINT emp_hire_date NOT NULL
, job_id VARCHAR2(10)
CONSTRAINT emp_job NOT NULL
, salary NUMBER(8,2)
CONSTRAINT emp_sal_ck CHECK (salary>0)
, commission_pct NUMBER(2,2)
, mgr_id NUMBER(6)
CONSTRAINT emp_mgr_fk REFERENCES
employees (employee_id)
, department_id NUMBER(4)
CONSTRAINT empdept_fk REFERENCES
dept (deptno) [ON DELETE CASCADE | ON DELETE SET NULL] );
htrmnn0y

htrmnn0y1#

如果你的代码被格式化为易于阅读,那么验证代码就容易多了;因此,首先,修复它,这样您就可以通过将列分隔成单独的行(第一列和第二列没有这样做)并通过使用缩进来辅助可读性来读取它。
然后需要在表名之后、第一列定义之前加一个左括号。
最后,你需要整理最后一行。可能只是删除方括号及其内容;但是如果你想指定 ON DELETE 然后选择一个子句。

create table emp_copy (
  employee_id    NUMBER(6)
                 CONSTRAINT emp_employee_id PRIMARY KEY
, first_name     VARCHAR2(20)
, last_name      VARCHAR2(25)
                 CONSTRAINT emp_lname_nn NOT NULL
, email          VARCHAR2(25)
                 CONSTRAINT emp_mail NOT NULL
                 CONSTRAINT emp_mail_uk UNIQUE
, phone_number   VARCHAR2(20)
, hire_date      DATE
                 DEFAULT sysdate
                 CONSTRAINT emp_hire_date NOT NULL
, job_id         VARCHAR2(10)
                 CONSTRAINT emp_job NOT NULL
, salary         NUMBER(8,2)
                 CONSTRAINT emp_sal_ck CHECK (salary>0)
, commission_pct NUMBER(2,2)
, mgr_id         NUMBER(6)
                 CONSTRAINT emp_mgr_fk REFERENCES employees (employee_id)
, department_id  NUMBER(4)
                 CONSTRAINT empdept_fk REFERENCES dept (deptno)
);

命名约束是一种很好的做法(很多人不必费心,在调试过程中它会再次困扰他们,所以很高兴看到它被完成);但是,您可能需要检查所使用的名称,并确保始终应用命名约定。如果你要用 _nn , _ck , _fk , _uk (为什么 uk ?)和 _pk 后缀(这有助于一眼看出违反的约束类型)然后在任何地方使用它们。
db<>在这里摆弄

相关问题