00907. 00000 - “缺少右括号”

时间:2017-01-13 08:48:25

标签: sql oracle create-table

create table Funkcje
(
  nazwa_funkcji varchar(15) constraint funk_pk PRIMARY KEY,
  min_myszy number(5) funk_min_nn NOT NULL,
  max_myszy number(5) funk_max_nn NOT NULL,
  constraint funk_ch check(min_myszy < max_myszy)
)

创建表格订单时出错:

  

ORA-00907 - “缺少右括号”

1 个答案:

答案 0 :(得分:3)

如果要在行中命名NOT NULL约束,则需要将约束关键字与每个其他类型的约束一起使用

create table Funkcje
(
  nazwa_funkcji varchar(15) constraint funk_pk PRIMARY KEY,
  min_myszy number(5) constraint funk_min_nn NOT NULL,
  max_myszy number(5) constraint funk_max_nn NOT NULL,
  constraint funk_ch check(min_myszy < max_myszy)
)

这将在数据字典中返回以下内容

SQL> select constraint_name, constraint_type, search_condition_vc
  2    from user_constraints
  3   where table_name = 'FUNKCJE';

CONSTRAINT_NAME      C SEARCH_CONDITION_VC
-------------------- - -----------------------
FUNK_MIN_NN          C "MIN_MYSZY" IS NOT NULL
FUNK_MAX_NN          C "MAX_MYSZY" IS NOT NULL
FUNK_CH              C min_myszy < max_myszy
FUNK_PK              P

此外,虽然varchar和varchar2是相同的,但Oracle并不保证varchar的当前行为将继续(尽管它已经很长时间了)。使用varchar2会更常见。 The documentation says

  

不要使用VARCHAR数据类型。请改用VARCHAR2数据类型。   虽然VARCHAR数据类型当前是VARCHAR2的同义词,   VARCHAR数据类型计划重新定义为单独的数据   用于可变长度字符串的类型与   不同的比较语义。