Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle SQL创建表是否显示缺少括号?Can';我看不出来_Sql_Oracle_Create Table - Fatal编程技术网

Oracle SQL创建表是否显示缺少括号?Can';我看不出来

Oracle SQL创建表是否显示缺少括号?Can';我看不出来,sql,oracle,create-table,Sql,Oracle,Create Table,我正在尝试创建某个表,但从Oracle得到以下错误: ORA-00907:缺少右括号 我试着去查,但没有发现类似的东西 这就是我想做的: 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 '%%

我正在尝试创建某个表,但从Oracle得到以下错误:

ORA-00907:缺少右括号

我试着去查,但没有发现类似的东西

这就是我想做的:

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)
);

您有一些问题:


  • 正如@GordonLinoff在评论中指出的那样,
    VERCHAR2
    是一个打字错误,应该改为
    VARCHAR2
  • 正如@TimBiegeleisen在他(现已删除)的回答中指出的,您的
    检查
    约束允许将任何包含两个连字符的值(例如
    x-y-z
    )插入电话号码。您应该使用类似于他建议的东西,即
    REGEXP\u like(电话号码,'\d{3}-\d{3}-\d{4}')
  • 最后,以及错误的实际原因,
    EMPLOYEE_ID
    上的
    notnull
    声明应该在
    生成的
    子句之后,而不是之前。注意:如果插入了
    NULL
    ,您实际上可能希望默认情况下在NULL AS IDENTITY上生成的
    插入标识值(而不是像当前定义那样生成错误)
  • 您的查询应该是:

    create table Employees
    (
    默认情况下作为标识生成的员工ID号不为空,
    名称VARCHAR2(30)不为空,
    PHONE_NUMBER VARCHAR(12)检查(REGEXP_LIKE(PHONE_NUMBER,'\d{3}-\d{3}-\d{4}')不为空,
    工资编号不为空,
    资历编号不为空,
    主键(员工ID)
    );
    

    下面是一个示例,它还显示了使用默认生成的
    作为标识空时的效果,而不是使用默认生成的
    作为标识非空时的效果。您有一些问题:


  • 正如@GordonLinoff在评论中指出的那样,
    VERCHAR2
    是一个打字错误,应该改为
    VARCHAR2
  • 正如@TimBiegeleisen在他(现已删除)的回答中指出的,您的
    检查
    约束允许将任何包含两个连字符的值(例如
    x-y-z
    )插入电话号码。您应该使用类似于他建议的东西,即
    REGEXP\u like(电话号码,'\d{3}-\d{3}-\d{4}')
  • 最后,以及错误的实际原因,
    EMPLOYEE_ID
    上的
    notnull
    声明应该在
    生成的
    子句之后,而不是之前。注意:如果插入了
    NULL
    ,您实际上可能希望默认情况下在NULL AS IDENTITY上生成的
    插入标识值(而不是像当前定义那样生成错误)
  • 您的查询应该是:

    create table Employees
    (
    默认情况下作为标识生成的员工ID号不为空,
    名称VARCHAR2(30)不为空,
    PHONE_NUMBER VARCHAR(12)检查(REGEXP_LIKE(PHONE_NUMBER,'\d{3}-\d{3}-\d{4}')不为空,
    工资编号不为空,
    资历编号不为空,
    主键(员工ID)
    );
    

    这里还有一个例子,它还显示了使用默认生成的
    作为标识NULL
    而不是默认生成的
    作为标识NOT NULL

    VERCHAR2
    是一个拼写错误。
    VERCHAR2
    是一个拼写错误。出于某种原因,我还是会犯同样的错误code@ErezAvior您使用的是哪一版本的Oracle?10g express edition
    IDENTITY
    列在12c之前不存在。您可能会发现这很有用:好吧,所以我试着这样做:``创建表Employees(EMPLOYEE_-ID NUMBER不为NULL,NAME VARCHAR2(30)不为NULL,PHONE_-NUMBER VARCHAR(12)CHECK(REGEXP_-like(PHONE_-NUMBER,'\d{3}-\d{3}-\d{4}'))不为NULL,工资号不为NULL,资历号不为NULL,主键(EMPLOYEE_-ID));ALTER TABLE EMPLOYEE ADD(约束部门主键(员工ID));创建序列部门\u seq以1开头;`错误跳了起来:
    ORA-00911:invalid character
    出于某种原因,我仍然收到相同的错误code@ErezAvior您使用的是哪一版本的Oracle?10g express edition
    IDENTITY
    列在12c之前不存在。您可能会发现这很有用:好吧,所以我试着这样做:``创建表Employees(EMPLOYEE_-ID NUMBER不为NULL,NAME VARCHAR2(30)不为NULL,PHONE_-NUMBER VARCHAR(12)CHECK(REGEXP_-like(PHONE_-NUMBER,'\d{3}-\d{3}-\d{4}'))不为NULL,工资号不为NULL,资历号不为NULL,主键(EMPLOYEE_-ID));ALTER TABLE EMPLOYEE ADD(约束部门主键(员工ID));创建序列部门\u seq以1开头;`然后错误跳转:
    ORA-00911:无效字符