【问题标题】:what is cursor object in PL/SQL什么是 PL/SQL 中的游标对象
【发布时间】:2010-12-24 06:55:52
【问题描述】:

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

我在某处读过下面的文字,感觉自己无法理解光标对象的概念。

"如果游标变量还没有 被分配给任何游标对象, OPEN FOR 语句隐含 为变量创建一个对象。
如果在 OPEN 时光标 变量已经指向一个 游标对象,则 OPEN FOR 不 创建一个新对象。相反,它 重用现有对象并 将新查询附加到该对象。 光标对象保持不变 与游标或查询分开 本身。 "

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

【问题讨论】:

标签: oracle plsql cursor


【解决方案1】:

你可以把它看作是一个用在C编程语言中的指针(如果你学过的话),它指向从SQL语句中检索到的每一行数据。将光标移动到下一行以读取下一行。

参考:http://www.cse.unsw.edu.au/~cs9311/10s2/lectures/week04/PL_SQL.pdf 这是我学习PL/SQL的讲义

【讨论】:

    【解决方案2】:

    据我了解,游标就像指向结果集中一行的指针。在其他编程语言中,它就像一个枚举器。枚举器是一个帮助遍历项目集合的对象。

    例如:

    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# 中与此类似:

        string[] collection = new string[]{"A", "B", "C"};
        var enumerator = collection.GetEnumerator();
        while(enumerator.MoveNext())
        {
            Console.WriteLine("current item:" + enumerator.Current);
        }
    

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

    希望对你有所帮助。

    【讨论】:

    • 感谢你们两位。尚我明白 C 语言中指针的概念。但在 C 语言中,指针变量包含我们执行操作的某个内存位置的地址。
    • 但是这里的情况完全不同,因为这里的游标变量指向一个游标对象,而游标对象又指向 SGA 中的数据集。
    • 是不是像指向指针的指针,或者如果是这样,那有什么需要为什么我们不能只使用指针(游标变量)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 2012-03-27
    • 2012-04-28
    相关资源
    最近更新 更多