0

私はPL/SQLを初めて使用し、プロシージャを作成しましたが、エラーを見つけることができませんでした.
実装の詳細:
私はいくつかのカーソルを使用してテーブルを走査し、ネストされたテーブルに関連データを格納しています(TYPE .. IS TABLE OF varchar(8))
具体的には、テーブルの前提条件には、特定のコースの前提条件コースが格納されます。特定のコースの直接の前提条件と、もしあれば前提条件の前提条件を見つけなければなりません。
Code:
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:
         := . ( @ % ;
2 つ目の質問ですが、prelist は precoll の変数です (TYPE precoll IS TABLE of varchar2(8);) varchar のテーブルなので、select クエリで TYPE precoll をクエリできますか?

4

1 に答える 1

1

質問 1: プロシージャの宣言バーでカーソルを宣言する必要があります。移動:

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の別の例を次に示します。

于 2013-04-29T13:38:52.197 に答える