Oracle SQL创建表是否显示缺少括号?Can';我看不出来
我正在尝试创建某个表,但从Oracle得到以下错误: ORA-00907:缺少右括号 我试着去查,但没有发现类似的东西 这就是我想做的: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 '%%
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)
);
您有一些问题:
VERCHAR2
是一个打字错误,应该改为VARCHAR2
李>
检查
约束允许将任何包含两个连字符的值(例如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 editionIDENTITY
列在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 editionIDENTITY
列在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:无效字符