直接在 CONNECT BY 子句中使用预言机序列

Using an oracle sequence directly in the CONNECT BY clause

提问人:user2102665 提问时间:10/3/2023 最后编辑:user2102665 更新时间:10/3/2023 访问量:43

问:

我有下面的查询来使用 CONNECT BY 子句中的序列并插入到表中

INSERT INTO DF_SUBJECTS (SUBJECT_ID)    
SELECT 'CUST' || LPAD(your_sequence.NEXTVAL, 3, '0'), ROWNUM
FROM dual
CONNECT BY LEVEL <= (SELECT your_sequence.CURRVAL FROM dual);

错误返回 ORA-02287:此处不允许序列号

以下是序列的定义:

 CREATE SEQUENCE your_sequence INCREMENT BY 1 MINVALUE 001 MAXVALUE 9999999999999999999999999999 NOCYCLE CACHE 20 NOORDER ;

如果在 connect by 子句中不允许调用序列,是否有任何建议在选择查询中使用 sequence 填充值?

Oracle 序列 连接

评论

2赞 Paul W 10/3/2023
你为什么要这样做?如果序列为 5,则将生成编号为 6、7、8、9 和 10 的 5 行。我看不出目的。也许您正在生成虚假的测试数据?通过查询将这些值插入到的表,或者只是对所需的行的 # 进行硬编码,您可以得到同样的东西。如果要将包含虚假数据的行数增加一倍,只需从表中返回即可,以便为每个现有行获得一个新行。几乎从不需要咨询。库尔瓦尔insert select
2赞 Justin Cave 10/3/2023
你想在这里完成什么?如果您最终尝试将行插入到表中的某个位置,则可以在语句中使用该序列。您将无法在语句中使用该序列,因为它无法按照您期望的方式工作。SQL 是声明式的 -- 您不控制数据库选择如何执行查询,因此每行的序列可能会递增多次。insertselect
0赞 user2102665 10/3/2023
@PaulW,我有表格要插入使用序列填充的运行数字。在问题中更新
0赞 Justin Cave 10/3/2023
如果目标是填充表,则可以在语句中执行此操作,而不是在 .insertselect
1赞 Paul W 10/4/2023
您尝试插入多少行,为什么这与序列相关?

答: 暂无答案