【发布时间】:2017-07-14 07:24:06
【问题描述】:
CREATE TABLE empinf(
companyid varchar2(5) PRIMARY KEY,
companyname varchar2(30) NOT NULL,
emailid varchar2(20) REFERENCES usrinf(emailid),
Mobile number CONSTRAINT moc CHECK(LENGTH(Mobile)=10),
city varchar2(20),
industrytype varchar2(20),
functionalarea varchar2(20),
membershipplan varchar2(20) CONSTRAINT cmp CHECK(membershipplan in ('TRIAL','PREMIUM MONTHLY','PREMIUM YEARLY')),
dateofsignup date DEFAULT SYSDATE CONSTRAINT chd CHECK( dateofsignup>=SYSDATE ),
dateofrenewal date generated always as
(CASE
WHEN membershipplan='TRIAL' THEN SYSDATE+14
WHEN membershipplan='PREMIUM MONTHLY' THEN SYSDATE+30
WHEN membershipplan='PREMIUM YEARLY' THEN SYSDATE+365
ELSE SYSDATE
END
) virtual,
renewalstatus varchar2(20) CONSTRAINT chrs CHECK(renewalstatus in('ACTIVE','EXPIRED')),
CONSTRAINT mun UNIQUE(Mobile)
)
此代码将在 Oracle Express 11G 中生成,我无法弄清楚代码有什么问题,它显示“缺少括号错误”。
【问题讨论】:
-
“缺少括号错误”是整个错误消息吗?
-
在我看来问题可能出在 DATEOFRENEWAL 的 CASE 中(SQL 错误:ORA-54002:只能在虚拟列表达式中指定纯函数)
-
我建议如下: 编写一个创建表的基本结构的语句。然后开始添加主/外键约束,然后添加唯一/普通索引,最后添加检查约束。这样,您将清楚地理解语句的不同部分,并且在出现问题时,您会更容易指出。这里的例子必须几乎完全重写才能工作,所以从基础开始。
-
@afonte yes.'ORA-00907 Missing Right Paranthesis' 是整个错误消息。
-
@etsa 那我该如何重写呢?