【问题标题】:Determine how long it takes for Oracle to fill a cursor确定 Oracle 填充游标需要多长时间
【发布时间】:2013-10-11 01:58:06
【问题描述】:

我正在尝试评估存储过程的性能,并尝试在 SQL Developer 工作表中运行它。基本思路是:

DECLARE
some_cursor SYS_REFCURSOR;
...
BEGIN

dbms_output.put_line('BEGIN: ' || TO_CHAR(CURRENT_TIMESTAMP, 'DD-MON-YYYY HH12:MI:SSxFF TZH:TZM'));

OPEN some_cursor FOR (...);

dbms_output.put_line('END: ' || TO_CHAR(CURRENT_TIMESTAMP, 'DD-MON-YYYY HH12:MI:SSxFF TZH:TZM'));

END;

两个时间戳相同;我假设这是因为调用 OPEN some_cursor FOR 只会启动选择。

有没有办法阻塞原线程直到光标被填满?

【问题讨论】:

    标签: sql plsql oracle10g cursor oracle-sqldeveloper


    【解决方案1】:

    根据您的问题标题,“...填充光标”,

    cursor for oracle 可以表示为指针,

    从定义: 游标是私有 SQL 区域的句柄或名称 - 内存中保存已解析语句和其他处理信息的区域。

    这将更好地解释:OraFAQ

    稍作修改:来自:here

    set serveroutput on
    DECLARE 
      l_cur SYS_REFCURSOR; 
      l_col VARCHAR2 (10); 
    BEGIN 
    
    
      OPEN l_cur FOR 
      SELECT 'Hi there'||LEVEL col 
          from dual 
          where 1 = 1
          CONNECT BY LEVEL <= 20; 
    
      DBMS_OUTPUT.PUT_LINE('Opened cursor'); 
    
    dbms_output.put_line('BEGIN: ' || TO_CHAR(CURRENT_TIMESTAMP, 'DD-MON-YYYY HH12:MI:SSxFF TZH:TZM'));
      <<cursor_loop>>
    
      loop
    
        fetch l_cur into l_col; 
        DBMS_OUTPUT.PUT_LINE('Fetched from cursor'); 
    
        EXIT cursor_loop WHEN l_cur%NOTFOUND;
    
        DBMS_OUTPUT.PUT_LINE('Process data fetched from cursor');    
      end loop;  -- cursor_loop
    dbms_output.put_line('END: ' || TO_CHAR(CURRENT_TIMESTAMP, 'DD-MON-YYYY HH12:MI:SSxFF TZH:TZM'));
      CLOSE l_cur; 
      dbms_output.put_line('Closed cursor');
    end; 
    /
    

    【讨论】:

      猜你喜欢
      • 2022-08-14
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      • 2012-05-07
      • 1970-01-01
      • 1970-01-01
      • 2014-06-24
      • 2012-05-11
      相关资源
      最近更新 更多