PLS-00103:期待以下任一操作时遇到符号“IS”
问题描述:
我正在尝试创建一个现在(而不是包)的函数来选择当前位于我的OP_GUIDE_VIEW中的列数据。PLS-00103:期待以下任一操作时遇到符号“IS”
只需要一个功能,选择那里有什么。不修改任何东西,不要以为我需要参数或任何东西。我到目前为止是以下内容;然而,我无法弄清楚这个错误来拯救我的生命: - 有一个错误@ 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
能给出更多的信息。
答
您正在尝试同时创建包头和正文。 你必须创建一个标题,然后是一个正文,带有单独的查询; 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>
有没有过到在此之前使用PL-SQL,有点在这里的黑暗中拍摄。我知道我错过了一些相当简单的事情,对此感到遗憾。 - 我的目标是回报多种价值观,而不是单一价值观,这种协议可以做到这一点吗?我的功能本身在正在努力完成的道路上吗? – SQLHelp
我刚刚编辑,以显示一种方法来获得您的需求 – Aleksej
我发布后找出它。哈哈对不起,打算解决按钮。 – SQLHelp