ORA-02287:此处不允许序号
出现这类问题表示的是在 Oracle 中不允许使用序列号,原因如下:
Restrictions on Sequence Values You cannot use CURRVAL and NEXTVAL in the following constructs:
1、A subquery in a DELETE, SELECT, or UPDATE statement
2、A query of a view or of a materialized view
3、A SELECT statement with the DISTINCT operator
4、A SELECT statement with a GROUP BY clause or ORDER BY clause
5、A SELECT statement that is combined with another SELECT statement with the UNION, INTERSECT, or MINUS set operator
6、The WHERE clause of a SELECT statement
7、The DEFAULT value of a column in a CREATE TABLE or ALTER TABLE statement
8、The condition of a CHECK constrain
可以理解为: 在子查询
,包含distinct
语句、where后面查询子句
、数据合并(union等)
、group by
、order by
、建表时默认值
、作为约束条件
等情况都不能用。
解决办法(select 为例)
-- 查询结果集查询外面在包裹一层查询,这样就可以放序列号字了。
insert(....)
select 序列,a.*
from (
select ... from table ...
) a