2014-01-18 36 views
0

我想写一个简单的光标并打开,获取值并关闭。以下是我的光标代码。错误,而在plsql中运行简单的光标

DECLARE 
    id cur.sid%TYPE; 
    s_num cur.serial#%TYPE; 
    CURSOR cur IS 
    SELECT sid, serial# 
    FROM v$session WHERE username = 'ABC'; 
BEGIN 
    OPEN cur; 

    LOOP 
    FETCH c cur INTO id, s_num; 
    dbms_output.put_line(id || ' ' || s_num); 
    END LOOP; 

    CLOSE cur; 
END; 
/

当运行此我看到以下错误消息:

FETCH c cur INTO id, s_num; 
     * 
ERROR at line 9: 
ORA-06550: line 9, column 9: 
PLS-00103: Encountered the symbol "CUR" when expecting one of the following: 
. into bulk 
The symbol "." was substituted for "CUR" to continue. 

任何种类的方向来解决这个之一被理解。谢谢。

+1

抓取只需要鼠标的名字 - “C” 是没有必要的。尝试FETCH cur INTO id,scum; – racraman

回答

0
  • FETCH c cur INTO id, s_num;c是多余的,删除它。
  • 更改ID和s_num的认定中作为followes:
    id v$session.sid%type;
    s_num v$session.serial#%type;

  • exit when cur%notfound;作为循环的退出条件。

    DECLARE 
    CURSOR cur IS 
    SELECT sid, serial# FROM v$session where username = 'ABC'; 
    id v$session.sid%type; 
    s_num v$session.serial#%type; 
    BEGIN 
    OPEN cur; 
    LOOP 
    FETCH cur 
        INTO id, s_num; 
        exit when cur%notfound; 
        dbms_output.put_line(id || ' ' || s_num); 
    END LOOP; 
    CLOSE cur; 
    END; 
    
1

使用IMPLICIT开放和光标的获取的简化版本(参数化)

DECLARE 
    CURSOR cur(v_USER VARCHAR2) 
    IS 
    SELECT sid, serial# FROM v$session where username = v_USER; 
BEGIN 
    FOR I IN cur('ABC') 
    LOOP 
    dbms_output.put_line(I.sid || ' ' || I.serial#); 
    END LOOP; 
END;