【问题标题】:00907. 00000 - "missing right parenthesis"00907. 00000 - “缺少右括号”
【发布时间】:2017-05-28 14:05:00
【问题描述】:
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 - “缺少右括号”
【问题讨论】:
标签:
sql
oracle
create-table
【解决方案1】:
如果你想在一行中命名一个 NOT NULL 约束,你需要像使用其他所有类型的约束一样使用 constraint 关键字
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 数据类型计划重新定义为单独的数据
用于可变长度字符串的类型,与
不同的比较语义。