0
私はテーブルに成績を挿入できるパッケージを作成しようとしています。教師にはいくつかのクラスがあり、教師が教えないクラスにグレードを入れたいときには例外を出したいと思っています。私は私のパッケージ本体を作成したいとき、私はこのエラーを取得していパッケージ作成エラー
CREATE OR REPLACE PACKAGE manager_facultate IS
PROCEDURE inserare_nota (nr_matr studenti.nr_matricol%type, nume profesori.nume%type, id_curs note.id_curs%type, valoarea note.valoare%type);
END manager_facultate;
/
CREATE OR REPLACE PACKAGE BODY manager_facultate IS
FUNCTION returneaza_id_curs (id_curs NUMBER) RETURN NUMBER IS
BEGIN
CURSOR c1 (nume) IS
SELECT d.id_curs from didactic d JOIN profesori p ON d.id_prof=p.id_prof
WHERE p.nume=nume;
END returneaza_id_curs;
PROCEDURE inserare_nota (nr_matr studenti.nr_matricol%type, nume profesori.nume%type, id_curs note.id_curs%type, valoarea note.valoare%type) IS
v_id NUMBER(3);
BEGIN
INSERT INTO note VALUES (nr_matr, id_curs, valoare, NULL);
EXCEPTION
WHEN id_gresit THEN
v_id :=returneaza_id_curs(nume);
IF id_curs <> v_id THEN
raise_application_error (-20002, 'Profesorul nu preda acest curs');
END IF;
END inserare_nota;
END manager_facultate;
/
: これは私のコードです。
LINE/COL ERROR
-------- -----------------------------------------------------------------
5/16 PLS-00103: Encountered the symbol "C1" when expecting one of the
following:
:= . (@ % ;
The symbol ":=" was substituted for "C1" to continue.
6/12 PLS-00103: Encountered the symbol "SELECT" when expecting one of
the following:
not null of nan infinite dangling a empty
6/45 PLS-00103: Encountered the symbol "JOIN" when expecting one of
the following:
LINE/COL ERROR
-------- -----------------------------------------------------------------
, ; for group having intersect minus order start union where
connect
どうしたのですか?
あなたの関数 'returneaza_id_curs'は、私にはそれは明らかではありません。 'FUNCTION returneaza_id_curs ... 'と書かれているので、 CURSOR c1(nume NUMBER)は... BEGIN ... END returneaza_id_curs;'、それは何をすべきかです。それは数値を返すと主張しますが、戻り値がないので、この関数は何をしますか? – Aleksej
CURSOR C1ステートメントは、BEGINより前の宣言部にある必要があります。あなたはこの例を見ることができます:http://www.techonthenet.com/oracle/cursors/declare.php。 –
が良い今 '関数のreturneaza_id_curs(ヌメVARCHAR2)RETURN番号 カーソルC1(ヌメ)は教則Dから SELECT d.id_curs JOIN profesori P上d.id_prof = p.id_prof p.nume =ヌメIS ISことです。 v_id NUMBER(3); BEGIN open c1; LOOP v1にc1(nume)をフェッチします。 終了時にc1%notfound; END LOOP; RETURN v_id; END returneaza_id_curs; ' – katy