如何在Oracle存储过程中获取游标数据

use*_*086 2 oracle

create or replace
PROCEDURE get_new
AS
    CUST_ID varchar2(100);
    ROUTERNAME_N VARCHAR2(100); 
BEGIN
    CURSOR c1 IS
    SELECT TRAFFIC_CUST_ID,ROUTERNAME INTO CUST_ID,ROUTERNAME_N
    FROM INTERFACE_ATTLAS
    WHERE rownum > 3;

    my_ename INTERFACE_ATTLAS.TRAFFIC_CUST_ID%TYPE;
    my_salary INTERFACE_ATTLAS.ROUTERNAME%TYPE;

    LOOP
        FETCH c1 INTO my_ename;
        FETCH c1 INTO my_salary;
        EXIT WHEN c1%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(my_ename);
    end loop;
end;
Run Code Online (Sandbox Code Playgroud)

我是oracle和存储过程的新手。我正在尝试使用游标获取来获取行,并得到以下错误:

PLS-00103: Encountered the symbol "C1" when expecting one of the following:
:= . ( @ % ;
Run Code Online (Sandbox Code Playgroud)

zar*_*tra 6

像这样重写它:

create or replace
PROCEDURE get_new
AS
    my_ename INTERFACE_ATTLAS.TRAFFIC_CUST_ID%TYPE;
    my_salary INTERFACE_ATTLAS.ROUTERNAME%TYPE;
    CURSOR c1 IS
    SELECT TRAFFIC_CUST_ID,ROUTERNAME
    FROM INTERFACE_ATTLAS
    WHERE rownum > 3;
BEGIN
  open c1;    
    LOOP
        FETCH c1 INTO my_ename, my_salary;
        EXIT WHEN c1%NOTFOUND;
        DBMS_OUTPUT.PUT_LINE(my_ename);
    end loop;
  close c1;
end;
Run Code Online (Sandbox Code Playgroud)

不要忘记打开和关闭游标。由于rownum > 3;您想输入以下内容rownum < 3;,它始终不会打印任何内容:,不是吗?