gpt4 book ai didi

oracle - 递增序列的正确语法是什么?

转载 作者:行者123 更新时间:2023-12-02 00:22:40 24 4
gpt4 key购买 nike

我有一个看起来像这样的函数。

    Function GetNewBatch ( CourseName Varchar2 ) Return RefCursor
As
Results RefCursor;
CourseId Number;
Begin

CourseId := Courselist.GetId( CourseName );

Open Results For
Select q.user_abn UserAbn,
q.completed_t DateCompleted,
CourseName,
q.batch_n BatchId
From GAK.GAKHR02_ACK q
Where q.crse_i = CourseId
And q.batch_n is null
And rownum < 1000;

GAK.SEQ1_GAKHR03.NextVal;
Return Results;
End;

我想在选择后递增序列,但 SQL Developer 给我错误:

“错误(194,5):PLS-00313:'NEXTVAL' 未在此范围内声明。”

我该怎么做?

最佳答案

这是因为您没有将 nextval 分配给变量。 假设 .nextval 是某个描述的函数。不是,Oracle 实际上将其描述为伪列;在与列相同的上下文中使用但未写入磁盘的内容。

你怎么样increment a sequence取决于您使用的 Oracle 版本。在 11G 之前,您可以在 PL/SQL block 中执行以下操作:

declare    
i number;
begin

select my_sequence.nextval
into i
from dual;

insert into my_table(id)
values(my_sequence.nextval);

update my_table
set id = my_sequence.nextval;

end;

在 11G 中,这略有变化,因此您还可以将 .nextval 中的“返回”值分配给变量:

declare
l_next_val number;
begin
l_next_val := my_sequence.nextval;
end;

出现 PLS-00313 的原因是 Oracle 假设 SEQ1_GAKHR03 是一个包或某个其他对象,而 .nextval 是该对象的子类型。

在不实际使用值的情况下增加序列是非常不寻常的。这是有意为之的行为吗?

关于oracle - 递增序列的正确语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10149216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com