2014-01-18 3 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

페!는 커서 이름이 필요합니다 (매개 변수화). 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;을 추가하십시오. 은 "C"가 필요하지 않습니다 -

    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; 
관련 문제