ORA-02287: 此处不能使用序列号

出错的原因: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结果集如下:

      

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值