PLSQL错误:在期望中遇到符号:在过程中

时间:2013-04-29 13:24:49

标签: oracle stored-procedures plsql nested-table

我是PL / SQL的新手,写了一个程序,无法发现错误 实施细则:
我使用几个游标遍历表并将一些相关数据存储在嵌套表(TYPE .. IS TABLE OF varchar(8))中。
具体而言,表先决条件存储给定课程的prereq课程。我必须找到给定课程的直接先决条件和先决条件的先决条件(如果有的话) 代码:
precoll在这里,

TYPE precoll IS TABLE of varchar2(8);

在包中声明,下面的过程在包体中。过程:

procedure disp_prereq(p_dept_code IN varchar2, p_courseno IN number, c_prereq OUT SYS_REFCURSOR)
IS
counter INTEGER ;
preserved INTEGER ;
prelist precoll := precoll();
row prerequisites%ROWTYPE;
BEGIN
        counter := 1;
        preserved := 1;
    cursor cr is select * from prerequisites where dept_code = p_dept_code and course# = p_courseno;
        open cr;
        loop
                fetch cr into row;
                exit when row%notfound;
                prelist(counter) := (row.pre_dept_code || row.pre_course#) ;
                counter := counter + 1;
        end loop;
        close cr;
        preserved := prelist.count;
        preserved := preserved + 1;
        counter := 1;
        cursor indr is select * from prerequisites;
        open indr;
        loop
                fetch indr into row;
                exit when row%notfound;
                if (prelist(counter) = (m.dept_code||m.course#)) then
                        prelist(preserved) := m.pre_dept_code||m.pre_course# ;
                        preserved := preserved + 1;
                end if;
                counter := counter + 1;
        end loop;
        close indr;
        open c_prereq FOR select * from prelist;
END disp_prereq;

并显示错误给了我:


62/9     PLS-00103: Encountered the symbol "CR" when expecting one of the
         following:
         := . ( @ % ;
我的第二个问题, prelist是precoll的变量(TYPE precoll IS TABLE of varchar2(8);) 我可以通过select查询查询TYPE precoll,因为它是varchar?

的表

1 个答案:

答案 0 :(得分:1)

问题1:游标应在程序的声明bart中声明。移动:

cursor cr is select * from prerequisites where dept_code = p_dept_code and course# = p_courseno;

BEGIN之前行。另一个游标(indr)也是如此。 (还有一种替代语法,您可以在声明部分声明游标变量,然后使用OPEN cursor_variable FOR SELECT ...。)

问题2:是的。在你的情况下:

在声明部分:

prelist precoll;
cur cursor;

在代码部分:

open cur for 
  SELECT * FROM table(prelist);

以下是Ask Tom的另一个例子。