我正在尝试使用 Oracle SQL 创建一个表,其中表的两列应具有默认值且不应为 NULL。
我收到了您可以在下面看到的错误,但我无法理解它,因为那里没有要关闭的括号!
剧本
CREATE TABLE ENCUENTROS (
elocal constraint clave_extrana_equipos references equipos(code) not null enable,
evisitante constraint clave_extrana_equipos references equipos(code) not null enable,
fecha date,
plocal number constraint plocal_mayor_cero check (plocal > 0) default 0 not null enable,
pvisitante number constraint pvisitante_mayor_cero check (pvisitante > 0) default 0 not null enable);
错误信息
plocal number constraint plocal_mayor_cero check (plocal > 0) default 0 not null enable, * ERROR at line 5: ORA-00907: missing right parenthesis
* 是 Oracle 检测到错误的地方
我不知道为什么那个位置应该有错误。
问题在于子句的顺序。如果您在子句之后
CHECK
移动约束,则该表将创建:DEFAULT 0
或者
请注意,我必须为两个外键约束指定不同的名称。
顺便说一句,你的定义有点奇怪:你需要一个值
local
并且pvisitante
如果没有传递,那么你使用0
. 但是检查约束要求值为>0
. 这意味着任何不提供值的插入都将失败......错误将是类似constraint pvisitante_mayor_cero failed validation
或类似的。也许更简单的方法是删除该
default
条款。然后,这将使不包含的插入pvisitante
失败并出现不同的错误:cannot insert null into ENCUENTROS (PVISITANTE)
。这对应用程序开发人员来说可能更清楚。