【问题标题】:Cursor Based Record vs Strong ref cursor基于游标的记录与强引用游标
【发布时间】:2018-12-29 15:57:07
【问题描述】:

我是 Oracle 数据库和 pl/sql 语言的新手。我的问题是强引用游标和基于游标的记录之间有什么区别 - 例如“var_exmpl”变量将存储游标值,即“cur_exmpl%rowtype”

【问题讨论】:

    标签: oracle plsql database-cursor


    【解决方案1】:

    您使用 ref 游标类型来声明游标变量。然后,您可以像使用显式游标一样从这些游标变量中获取。在这两种情况下,您都可以并且通常会提取到记录中。

    使用显式游标,您可以根据游标声明记录。使用强引用游标类型,我将声明基于用于声明引用游标的相同类型的记录。

    这里有一些例子:

    DECLARE
       TYPE employee_rt IS RECORD
       (
          employee_id   employees.employee_id%TYPE,
          salary        employees.salary%TYPE
       );
    
       TYPE strong_rc IS REF CURSOR
          RETURN employee_rt;
    
       strong_rec              employee_rt;
    
       CURSOR twocols_cur
       IS
          SELECT employee_id, salary FROM employees;
    
       rec_from_explicit_cur   twocols_cur%ROWTYPE;
    BEGIN
       OPEN strong_rc FOR SELECT employee_id, salary FROM employees;
    
       FETCH strong_rc INTO strong_rec;
    
       CLOSE strong_rc;
    
       OPEN twocols_cur;
    
       FETCH twocols_cur INTO rec_from_explicit_cur;
    
       CLOSE twocols_cur;
    END;
    /
    

    【讨论】:

    • 所以在这两种情况下,我们使用不同的游标得到相同的结果。它们之间没有区别,那么哪个性能更好?
    • 在性能方面没有差异。通常,当您需要 (a) 更改要在运行时执行的查询时,您可以使用游标变量 - 您可以打开动态查询(字符串)或带有 case 或 If 的不同静态查询,或者 (b) 您需要将游标变量传递到另一个块或传递到非 PL/SQL 上下文,如 Java 程序。
    猜你喜欢
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    相关资源
    最近更新 更多