Oracle
在預設 0 之後(或之前)缺少右括號,Oracle
我正在嘗試使用 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
CREATE TABLE ENCUENTROS ( elocal constraint clave_extrana_equipos_1 references equipos(code) not null enable, evisitante constraint clave_extrana_equipos_2 references equipos(code) not null enable, fecha date, plocal number default 0 not null enable constraint plocal_mayor_cero check (plocal > 0), pvisitante number default 0 not null enable constraint pvisitante_mayor_cero check (pvisitante > 0) );
或者
CREATE TABLE ENCUENTROS ( elocal constraint clave_extrana_equipos_1 references equipos(code) not null enable, evisitante constraint clave_extrana_equipos_2 references equipos(code) not null enable, fecha date, plocal number default 0 constraint plocal_mayor_cero check (plocal > 0) not null enable, pvisitante number default 0 constraint pvisitante_mayor_cero check (pvisitante > 0) not null enable );
請注意,我必須為兩個外鍵約束賦予不同的名稱。
順便說一句,你的定義有點奇怪:你需要一個值
local
,pvisitante
如果沒有傳遞,那麼你使用0
. 但檢查約束要求值為>0
。這意味著任何不提供值的插入都將失敗……錯誤將類似於constraint pvisitante_mayor_cero failed validation
或類似。也許更簡單的方法是刪除該
default
條款。然後,這將使插入不包含pvisitante
失敗並出現不同的錯誤:cannot insert null into ENCUENTROS (PVISITANTE)
. 這對應用程序開發人員來說可能更清楚。