Oracle序列:CURRVAL不允许在这里?

Phi*_*ert 2 oracle sequence

以下Oracle SQL代码生成错误" ORA-02287:此处不允许序列号 ":

INSERT INTO Customer (CustomerID,Name) VALUES (Customer_Seq.nextval,'AAA');
SELECT * FROM Customer where CustomerID=Customer_Seq.currval;
Run Code Online (Sandbox Code Playgroud)

第二行(SELECT语句)发生错误.我真的不明白这个问题,因为这确实有效:

INSERT INTO Customer (CustomerID,Name) VALUES (Customer_Seq.nextval,'AAA');
SELECT Customer_Seq.currval from dual;
Run Code Online (Sandbox Code Playgroud)

APC*_*APC 8

您已经发布了一些示例代码,因此不清楚您要实现的目标.如果你想知道指定的值,比如传递给其他一些程序,你可以这样做:

SQL> var dno number
SQL> insert into dept (deptno, dname, loc)
  2      values (deptno_seq.nextval, 'IT', 'LONDON')
  3      returning deptno into :dno
  4  /

1 row created.

SQL> select * from dept
  2  where deptno = :dno
  3  /

    DEPTNO DNAME          LOC
---------- -------------- -------------
        55 IT             LONDON

SQL>
Run Code Online (Sandbox Code Playgroud)

编辑

我们可以使用RETURNING子句来获取任何列的值,包括那些已使用默认值或触发器代码设置的列.


Ton*_*ews 5

您没有说明您使用的是哪个版本的Oracle.过去在PL/SQL中可以使用序列的地方存在限制 - 大多数情况下,如果不是全部都在11G中消失了.此外,SQL中有限制 - 请参阅此列表.

在这种情况下,您可能需要写:

SELECT Customer_Seq.currval INTO v_id FROM DUAL; 
SELECT * FROM Customer where CustomerID=v_id;
Run Code Online (Sandbox Code Playgroud)

(评论后编辑).