在create table语句中用于内联创建外键索引的语法

问题描述 投票:0回答:1

我想创建一个具有命名外键约束并有命名索引支持的表bar。我想在create table DDL语句中使用内联定义来做到这一点。查看Oracle 19 SQL Language Reference时,似乎Oracle应该支持内联。

执行以下语句时...

create table foo (
    id number not null primary key
);

create table bar (
    id     number not null primary key,
    nick   varchar2(16) not null constraint foo_nick_ck unique using index,
    foo_id number not null constraint foo_fk references foo using index
);

Oracle将以[42000][907] ORA-00907: missing right parenthesis进行响应,并指向最后一行using index之前的位置。如果删除using index,它将起作用(但当然不会创建索引)。我保留了列nick作为其内联创建后备索引的工作的示例,但使用的是唯一约束而不是外键约束。

我知道一种解决方法是在单独的DDL语句中创建后备索引,但是我非常想使其内联整洁。

oracle ddl oracle19c
1个回答
0
投票

我知道一种解决方法是在单独的DDL语句中创建后备索引,但是我非常想使其内在整洁。

遗憾的是,不存在用于内联创建索引的语法。

[USING INDEX子句是语法糖:无论我们是否包含该子句(*),Oracle都会创建索引来实施主键和唯一性约束。这是因为索引对于Oracle实施唯一约束是必需的。但是不需要索引来强制使用外键,这只是可取的。


(*)除非Oracle可以在约束列上使用现有索引。


0
投票

根据Oracle documentation

仅在启用唯一键或主键约束时才可以指定using_index_clause

您不能为NOT NULL外键或检查约束指定此子句。

© www.soinside.com 2019 - 2024. All rights reserved.