Oracle PL/SQL中的游标对象是什么

Oracle PL/SQL中的游标对象是什么,oracle,plsql,cursor,Oracle,Plsql,Cursor,我理解PL/SQL变量的概念,但我无法在脑海中清楚地了解PL/SQL中的游标对象 我在某个地方读过下面的文字,觉得自己无法理解游标对象的概念 “如果游标变量尚未 已指定给任何光标对象, OPEN FOR语句隐式 为变量创建一个对象。 如果在启动时打开光标 变量已指向 光标对象,然后打开,以不显示 创建一个新对象,而不是 重用现有对象并 将新查询附加到该对象。 光标对象将保持不变 与游标或查询分开 本身。” 请解释一下它是如何在内部工作的……您可以将它视为C编程语言中使用的指针(如果您曾经学习过)

我理解PL/SQL变量的概念,但我无法在脑海中清楚地了解PL/SQL中的游标对象

我在某个地方读过下面的文字,觉得自己无法理解游标对象的概念

“如果游标变量尚未 已指定给任何光标对象, OPEN FOR语句隐式 为变量创建一个对象。
如果在启动时打开光标 变量已指向 光标对象,然后打开,以不显示 创建一个新对象,而不是 重用现有对象并 将新查询附加到该对象。 光标对象将保持不变 与游标或查询分开 本身。”


请解释一下它是如何在内部工作的……

您可以将它视为C编程语言中使用的指针(如果您曾经学习过),它指向从SQL语句检索到的每一行数据。将光标移动到下一行以读取下一行

参考:
这是我用来学习PL/SQL的课堂讲稿据我的理解,光标就像指向结果集中某一行的指针。在其他编程语言中,它就像一个枚举器。枚举数是帮助遍历项目集合的对象

例如:

declare
  cursor cur is select * from someTable;

begin
  open cur;
  loop
    fetch cur into record;
    exit when cur%notfound;
    dbms_output.put_line('Col1: ' || record.col1 || ', Col2: ' || record.col2);
  end loop;
end;
与C#中的类似:

请注意,使用光标获取记录数据类似于使用枚举器获取数据


希望这对您有所帮助。

谢谢你们两位。。我确实理解C语言中指针的概念。但在C语言中,指针变量是指我们在其上执行操作的某个内存位置的加法器。但这里的情况完全不同,因为这里的指针变量指向一个游标对象,而该游标对象又指向SGA中的数据集。那么它是否像指向指针的指针,或者如果它是指针的指针,那么我们为什么不能使用它呢只需使用指针(游标变量)上面引用了Steven Feuerstein的Oracle PL/SQL编程书:
    string[] collection = new string[]{"A", "B", "C"};
    var enumerator = collection.GetEnumerator();
    while(enumerator.MoveNext())
    {
        Console.WriteLine("current item:" + enumerator.Current);
    }