ORA-02287: 此处不允许序号

今天使用 insert into select 时出现了这个异常,感觉很诡异,去metalink查了下资料,找出了错误原因,记录下来。

SQL> CREATE TABLE test_baser01(
  2                ID        NUMBER NOT NULL,
  3                NAME      VARCHAR2(50),
  4                age       NUMBER,
  5                sex       NUMBER,
  6                comments  VARCHAR2(240)
  7                );
表已创建。
SQL> CREATE SEQUENCE test_baser01_s;
序列已创建。
SQL> INSERT INTO Test_Baser01
  2      (Id, NAME)
  3      SELECT Test_Baser01_s.Nextval, A1
  4        FROM Temp_a
  5       WHERE A1 < '32000010'
  6       ORDER BY A1;
    SELECT Test_Baser01_s.Nextval, A1
                          *
ERROR 位于第3行:
ORA-02287: 此处不允许序号

资料:

Restrictions on Sequence Values You cannot use CURRVAL and NEXTVAL in the
following constructs:
■ A subquery in a DELETE, SELECT, or UPDATE statement
■ A query of a view or of a materialized view
■ A SELECT statement with the DISTINCT operator
■ A SELECT statement with a GROUP BY clause or ORDER BY clause
■ A SELECT statement that is combined with another SELECT statement with the
UNION, INTERSECT, or MINUS set operator
■ The WHERE clause of a SELECT statement
■ The DEFAULT value of a column in a CREATE TABLE or ALTER TABLE statement
■ The condition of a CHECK constrain

解决方案:

sql外面包一层

SQL> INSERT INTO Test_Baser01
  2      (Id, NAME)
  3      SELECT Test_Baser01_s.Nextval, A1
  4        FROM (SELECT *
  5                FROM Temp_a
  6               WHERE A1 < '32000010'
  7               ORDER BY A1);
已创建6行。
SQL> SELECT Id, NAME FROM Test_Baser01;
       ID NAME
--------- --------------------------------------------------
        1 32000004
        2 32000005
        3 32000006
        4 32000007
        5 32000008
        6 32000009
已选择6行。
SQL>

from:http://blog.itpub.net/23009281/viewspace-766076/

原文地址:https://www.cnblogs.com/chaizp/p/5121601.html