缺少的括号在哪里?

时间:2020-06-12 11:27:47

标签: sql oracle oracle11g

我正在尝试学习SQL数据库,但是我似乎无法理解这里的问题所在,我不断被告知缺少正确的括号。如果有人能指出问题出在哪里(我正在研究Oracle 11G XE),将不胜感激:

(?:[/])([A-Z0-9]{10})(?:[\/|\?|\&|\s|$])

1 个答案:

答案 0 :(得分:0)

如果对代码进行格式化以使其易于阅读,则验证代码要容易得多;因此,首先,对其进行修复,以便通过将各列分隔到单独的行(第一和第二列没有这样做)并使用缩进来提高可读性来读取它。

然后,在表名之后和第一列的定义之前需要一个括号。

最后,您需要整理出最后一行。可能只是删除方括号及其内容;但是如果要指定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 <>提琴here