创建 table 中的序列?

Sequence in create table?

所以我在考试中以 60% 的分数失败了,需要 3% 才能通过,我想知道 create table 语句中的顺序,问题是 => 在数据库中 "exist" 序列例如 SEQ_001 并用于例如=>

SQL>create table ( id number default seq_001.nextval ); or
    create table ( id number default seq_001.currval );

并在 1z0 071 的主题中写道 =>

This exam was validated against 11g Release 2 version 11.2.0.1.0 and up to 19c

而且我知道在 create table from 12c 中可以使用该序列,但在以前的版本中则不行,所以我怎么知道这个问题适用于哪个版本以及如何检查存在的序列是否与nextval, exists 不代表被使用了(我是关于nextval 创建后的,如果没有currval 会报错)。这类题我都搞糊涂了。

关于参加 1z0-071 考试的 Oracle 版本问题,我会说虽然 11g 到 19c 之间存在差异,但大多数问题应该基于这些版本之间标准的概念。

更具体地说,对于问题的序列部分,虽然可以创建一个 table,其默认值指向 currval,但它很少有用。使用上面的 ID 示例,想象一下使用此序列创建用户 ID。我们希望不同的用户拥有不同的 ID,而使用 currval 时,很可能不同的用户拥有相同的 ID,从而使该列基本上无用。

虽然您的问题中没有指定,但我认为大多数使用序列默认值的示例都是针对代理主键的,这需要是唯一的。 Nextval 将确保这些是唯一的,假设外部用户输入的行的值不大于现有序列 currval。

下面的语句

create table t23 ( id number default seq_001.nextval ); 

Oracle 18c (demo on db<>fiddle) 上成功。

fails on Oracle 11gR2 出现此错误:

ORA-00984: column not allowed here

db<>fiddle 使用 XE 版本,但我不认为这是解释。所以看来这次考试不是"was validated against 11g Release 2 version 11.2.0.1.0" 完全严格。