以下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)
您已经发布了一些示例代码,因此不清楚您要实现的目标.如果你想知道指定的值,比如传递给其他一些程序,你可以这样做:
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子句来获取任何列的值,包括那些已使用默认值或触发器代码设置的列.
您没有说明您使用的是哪个版本的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)
(评论后编辑).
| 归档时间: |
|
| 查看次数: |
16412 次 |
| 最近记录: |