Oracle 这个光标怎么了

Oracle 这个光标怎么了,oracle,cursor,Oracle,Cursor,了解显式游标并尝试创建我的第一个游标: 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 D

了解显式游标并尝试创建我的第一个游标:

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:
:= . ( % ;

有什么想法吗?

我相信在Oracle中,你不能
获取
光标内部的
语句——也许你可以将你的代码格式化得更整齐,或者给出更好的文本解释(理想情况下两者都是!-),以帮助我们判断你在[[咒骂删除]]中想做什么

我相信,在Oracle中,您不能
获取
游标内部的
IS
语句——也许您可以将代码的格式设置得更整齐,或者给出更好的文本解释(理想情况下两者都是!-),以帮助我们判断[[咒骂删除]]中您想做什么

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

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;

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

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;

就这样。谢谢-1用于直接从书中无脑复制错误代码。就是这样。谢谢-1用于直接从book.Hmmm无脑复制错误代码。你可以把它标记为正确答案,这样其他人就知道问题的解决方法:)嗯。你可以把它标记为正确答案,这样其他人就知道问题的解决方法:)