Estou tentando criar uma tabela com Oracle SQL onde duas colunas da tabela devem ter um valor padrão e não devem ser NULL.
Estou recebendo o erro que você pode ver abaixo, mas não consigo entendê-lo, porque não há parênteses para serem fechados lá!
O roteiro
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);
A mensagem de erro
plocal number constraint plocal_mayor_cero check (plocal > 0) default 0 not null enable, * ERROR at line 5: ORA-00907: missing right parenthesis
* é onde o Oracle detectou o erro
Estou sem saber por que deve haver um erro nessa posição.
O problema é com a ordenação das cláusulas. Se você mover a
CHECK
restrição após aDEFAULT 0
cláusula, a tabela criará:ou
Observe que eu tive que dar nomes diferentes para as duas restrições de chave estrangeira.
BTW, há um pouco de estranheza em sua definição: você precisa de um valor para
local
epvisitante
e se nenhum for passado, então você usa0
. Mas a restrição de verificação exige que o valor seja>0
. Significando que qualquer insert que não forneça um valor irá falhar... O erro será algo parecidoconstraint pvisitante_mayor_cero failed validation
ou similar.Talvez uma abordagem mais simples seja remover a
default
cláusula. Isso fará uma inserção que não incluipvisitante
falha com um erro diferente:cannot insert null into ENCUENTROS (PVISITANTE)
. Isso pode ser mais claro para os desenvolvedores de aplicativos.