【问题标题】: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 数据类型计划重新定义为单独的数据 用于可变长度字符串的类型,与 不同的比较语义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      • 2016-10-23
      • 1970-01-01
      • 1970-01-01
      • 2015-03-31
      • 2018-05-23
      相关资源
      最近更新 更多