Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle序列与游标_Oracle_Cursor_Sequence - Fatal编程技术网

Oracle序列与游标

Oracle序列与游标,oracle,cursor,sequence,Oracle,Cursor,Sequence,我是一名SQL用户,试图理解下面的Oracle游标代码 我知道第一个块是从id_seq获取当前序列号到id。但是第二个街区在干什么 特别是这一行-如果c3%未找到或c3_rec.id为空,那么c3未找到和c3_rec.id为空的含义是什么 卢克的评论是正确的。最后一行表示如果没有找到记录,或者如果列id的值为空,则。。。等等 在这种情况下,我认为这条线是多余的。光标选择序列id_seq的CURRVAL,该值是使用NEXTVAL在当前会话中最近选择的值 也许我遗漏了什么,但我只看到了以下可能性:

我是一名SQL用户,试图理解下面的Oracle游标代码

我知道第一个块是从id_seq获取当前序列号到id。但是第二个街区在干什么

特别是这一行-如果c3%未找到或c3_rec.id为空,那么c3未找到和c3_rec.id为空的含义是什么


卢克的评论是正确的。最后一行表示如果没有找到记录,或者如果列id的值为空,则。。。等等

在这种情况下,我认为这条线是多余的。光标选择序列id_seq的CURRVAL,该值是使用NEXTVAL在当前会话中最近选择的值

也许我遗漏了什么,但我只看到了以下可能性:

如果id_seq不存在,则在 游标被声明

如果id_seq存在,但未在中引用有效的NEXTVAL 在当前会话中,光标移动后将立即引发异常 打开了。如果NEXTVAL超过序列的值,则它将无效 最大值

如果有效id_seq.NEXTVAL已在当前 会话中,CURRVAL将是的最新有效值 下一步


如果代码一直执行到最后一行,而没有出现错误,那么我们已经知道找到了一条记录。c3_rec.id是序列当前值及其增量的两个整数之和,因此不能为空。因此,这句话对我来说是多余的。

我不是甲骨文专家,但通过快速的谷歌搜索发现了这一点。第一个块只是定义光标。第二个是打开它并将数据提取到c3_rec中。如果光标未返回任何记录或返回的记录没有id,则…序列与会话无关,所有值都在数据库级别。在Oracle 12c中,您可以在会话级别定义序列,但是默认用法是在数据库级别。序列本身是会话独立的,但sequence.CURRVAL不是。如果我的会话的NEXTVAL为1,那么您的会话将从同一序列中再获得四个NEXTVAL,您的CURRVAL将为5,我的CURRVAL仍然为1。我们的下一轮比赛都是6岁。
    CURSOR c3 IS
    SELECT id_seq.CURRVAL id
    FROM dual;

OPEN c3;
FETCH c3 INTO c3_rec;
IF c3%NOTFOUND OR c3_rec.id IS NULL THEN