Oracle SQL 创建 Table 说缺少括号?看不见

Oracle SQL Create Table Says Missing Parenthesis? Can't see it

我正在尝试创建某个 table 但我从 Oracle 收到此错误:

ORA-00907: missing right parenthesis

我试图查找它,但没有找到类似的东西...

这就是我想要做的:

CREATE TABLE Employees
(
    EMPLOYEE_ID NUMBER NOT NULL GENERATED BY DEFAULT AS IDENTITY, 
    NAME VERCHAR2(30) NOT NULL, 
    PHONE_NUMBER VARCHAR(12) CHECK(PHONE_NUMBER LIKE '%%%-%%%-%%%%') NOT NULL, 
    SALARY NUMBER NOT NULL, 
    SENIORITY NUMBER NOT NULL, 
    PRIMARY KEY(EMPLOYEE_ID)
);

你有几个问题:

  1. 正如@GordonLinoff 在评论中指出的那样,VERCHAR2 是一个错字,应改为 VARCHAR2;
  2. 正如@TimBiegeleisen 在他(现已删除)的回答中指出的那样,您的 CHECK 约束允许将其中包含两个连字符的任何值(例如 x-y-z)插入到 phone 号。你应该使用他建议的东西,即
    REGEXP_LIKE(PHONE_NUMBER, '\d{3}-\d{3}-\d{4}')
  3. 最后,也是错误的实际原因,EMPLOYEE_ID 上的 NOT NULL 声明应该是 之后 GENERATED 子句,而不是在它之前。请注意,如果插入 NULL,您实际上可能希望
    GENERATED BY DEFAULT ON NULL AS IDENTITY
    插入标识值(而不是像当前定义那样生成错误)

您的查询应该是:

create table Employees
(
EMPLOYEE_ID NUMBER GENERATED BY DEFAULT AS IDENTITY NOT NULL, 
NAME VARCHAR2(30) NOT NULL, 
PHONE_NUMBER VARCHAR(12) CHECK(REGEXP_LIKE(PHONE_NUMBER, '\d{3}-\d{3}-\d{4}')) NOT NULL, 
SALARY NUMBER NOT NULL, 
SENIORITY NUMBER NOT NULL, 
PRIMARY KEY(EMPLOYEE_ID)
);

这是一个 demo on dbfiddle,它也显示了使用 GENERATED BY DEFAULT ON NULL AS IDENTITY 而不是 GENERATED BY DEFAULT AS IDENTITY NOT NULL 的效果。