2009-06-15 53 views
0

学习一下明确的游标,并试图创建我FRST一个:哪些错误与此光标

SET SERVEROUTPUT ON 
DECLARE 
v_ename EMP.FIRST_NAME%TYPE; 
v_salary EMP.SALARY%TYPE; 
CURSOR c_emp IS SELECT first_name, salary FROM emp; 
BEGIN 
    OPEN c_emp; 
    FETCH c_emp INTO v_ename, v_salary; 
    DBMS_OUTPUT.PUT_LINE('Employee Details ' || v_ename || ' ' || v_salary) 

    FETCH c_emp INTO v_ename, v_salary; 
    DBMS_OUTPUT.PUT_LINE('Employee Details ' || v_ename || ' ' || v_salary) 

    CLOSE c_emp; 
END; 

,但它给了我:

FETCH c_emp INTO v_ename, v_salary; 
    * 
ERROR at line 10: 
ORA-06550: line 10, column 3: 
PLS-00103: Encountered the symbol "FETCH" when expecting one of the following: 
:= . (% ; 
The symbol ";" was substituted for "FETCH" to continue. 
ORA-06550: line 13, column 3: 
PLS-00103: Encountered the symbol "CLOSE" when expecting one of the following: 
:= . (% ; 

任何想法?

+1

嗯。您可以将其标记为正确的答案,以便其他人知道该问题的解决方案:) – Kirtan 2009-06-15 05:43:09

回答

5

你忘了这行后面的分号(;)吗?

Line #9: DBMS_OUTPUT.PUT_LINE('Employee Details ' || v_ename || ' ' || v_salary); 

尝试添加它,看看错误是否仍然存在。

编辑:是的,它似乎缺少分号是问题。更新了您的查询。尝试这个。

SET SERVEROUTPUT ON 
DECLARE 
    v_ename EMP.FIRST_NAME%TYPE; 
    v_salary EMP.SALARY%TYPE; 
CURSOR c_emp IS SELECT first_name, salary FROM emp; 
BEGIN 
     OPEN c_emp; 
     FETCH c_emp INTO v_ename, v_salary; 
     DBMS_OUTPUT.PUT_LINE('Employee Details ' || v_ename || ' ' || v_salary); 
     FETCH c_emp INTO v_ename, v_salary; 
     DBMS_OUTPUT.PUT_LINE('Employee Details ' || v_ename || ' ' || v_salary); 
     CLOSE c_emp; 
END; 
+0

再次,两行下来。 – UncleO 2009-06-15 05:27:04

0

我相信,在Oracle中,你可以在CURSOR <cursor> IS语句内不FETCH <cursor> - 也许你可以更巧妙地格式化你的代码和/或提供更好的文本解释(理想情况下都 - !),以帮助我们神圣的[什么脏话删除]]你正在尝试做什么?

+0

格式化完成。 – Kirtan 2009-06-15 05:22:03