出错的原因:NEXTVAL和【UNION或者UNION ALL】不能在 *同一级中* 同时使用
案列介绍:
取两个序列号插入同一个表中的时候,就出现了错误:ORA-02287: 此处不能使用序列号
SQL简化了一下,看起来更容易明白:
SELECT
seq_cst_chng_num.NEXTVAL seqId
FROM
dual
UNION ALL --此处换成 UNION 也是同样的错误
SELECT
seq_cst_chng_num.NEXTVAL seqId
FROM
dual
上面的sql形式就会报ORA-02287的错误,解决方案因项目要求不一样会有不同的解决方案。
这里就按照本人目前的项目需求,有两个解决方案,
1、当是这两个select结果union all之后直接插入某个表的时候,就可以先取序列号,然后当作参数传入该sql中。
2、如果仅仅是select,就可以把该sql拆成两个sql,然后将select结果在程序中拼接起来。
3、将两个select结果合并之后,再select结果集,如下所示
INSERT INTO
XXXXXX (seqId, name,age)
SELECT
seq_cst_chng_num.NEXTVAL seqId, --和UNION只要不是同一级的话,就不会出错
tgt.*
FROM (
SELECT
'张三' name,
16 age
FROM
dual
UNION
SELECT
'李四' name,
17 age
FROM
dual
) tgt
select结果集如下: