PLS-00103:当期待下列之一时遇到符号“IS”

时间:2016-06-09 18:52:34

标签: sql oracle cursor

我正在尝试创建一个函数(而不是一个包)来选择当前在我的OP_GUIDE_VIEW中的列数据。

只需要一个能够选择那里的功能。不修改任何东西,不要认为我需要参数或任何东西。到目前为止我得到的是以下内容;但是,我无法弄清楚这个错误来挽救我的生命: - 有错误@ IS C1 V_CURSOR;

我现在拥有的:

create or replace 
PACKAGE PKG_OPGUIDE_COLLECTIONDATA AS

type v_cursor is ref cursor
return OPGUIDE_VIEW%rowtype;
 c2 v_cursor;
 r_c2 c2%rowtype;

 function fn_opview return v_cursor 
 is c1 v_cursor;
 begin
 open c1 for select * from OPGUIDE_VIEW;
 return c1;
 end;

 begin
 c2 := fn_opview;
 loop
 fetch c2 into r_c2;
 exit when c2%notfound;
 dbms_output.put_line(initcap(r_c2.JOB_NAME));
 end loop;
 close c2;
 end;

END PKG_OPGUIDE_COLLECTIONDATA;

错误:

PLS-00103: Encountered the symbol "IS" when expecting one of the following:
constant exception <an identifier>
   <a double-quoted delimited-identifier> table long double ref
   char time timestamp interval date binary national character
   nchar

如果需要,可以提供更多信息。

1 个答案:

答案 0 :(得分:2)

您正在尝试同时创建包标头和正文。 您必须使用单独的查询创建标题,然后是正文; here你发现了更多的东西。 您可以编辑代码的示例:

设置:

create table OPGUIDE_VIEW(JOB_NAME varchar2(100));
insert into OPGUIDE_VIEW values ('job1');
insert into OPGUIDE_VIEW values ('job2');

包创建:

CREATE OR REPLACE PACKAGE PKG_OPGUIDE_COLLECTIONDATA AS
    FUNCTION fn_opview
        RETURN SYS_REFCURSOR;

    PROCEDURE printData;
END;
/
CREATE OR REPLACE PACKAGE BODY PKG_OPGUIDE_COLLECTIONDATA AS
    FUNCTION fn_opview
        RETURN SYS_REFCURSOR IS
        c1                                      SYS_REFCURSOR;
    BEGIN
        OPEN c1 FOR SELECT * FROM OPGUIDE_VIEW;

        RETURN c1;
    END;

    PROCEDURE printData IS
        c2                                      SYS_REFCURSOR;
        r_c2                                    OPGUIDE_VIEW%ROWTYPE;
    BEGIN
        c2    := fn_opview();

        LOOP
            FETCH c2 INTO r_c2;

            EXIT WHEN c2%NOTFOUND;
            DBMS_OUTPUT.put_line(INITCAP(r_c2.JOB_NAME));
        END LOOP;

        CLOSE c2;
    END;
END PKG_OPGUIDE_COLLECTIONDATA;

致电您的程序:

SQL> set serveroutput on
SQL>
SQL> begin
  2  PKG_OPGUIDE_COLLECTIONDATA.printData;
  3  end;
  4  /
Job1
Job2

PL/SQL procedure successfully completed.

SQL>