2009-06-15 45 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