0
Bir tabloya notlar ekleyeceğim bir paket oluşturmaya çalışıyorum. Öğretmenlerin öğrettikleri belirli sınıfları vardır ve öğretmenler öğretmedikleri bir sınıfa not vermek istediğinde bir istisna geliştirmek isterler. Benim paket gövdesini oluşturmak istediğinizde bu hataları alıyorumpaketi oluşturma hataları oluşturma
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;
/
: Bu benim kodudur.
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
Neyi yanlış yaptım?
İşleviniz 'returneaza_id_curs' bana bunu açık değildir; 'FUNCTION returneaza_id_curs' olarak yazılması gerektiğine karar verildi ... IS CURSOR c1 (sayı NUMARASI) IS ... BEGIN ... END returneaza_id_curs; ', cevap ne yapmalı? bir sayı döndürdüğünü iddia ediyor, ancak dönüş değeriniz yok, bu nedenle bu işlev ne yapmalı? – Aleksej
CURSOR C1 ifadesi, BEGIN'den önce beyan bölümünde yer almalıdır. Bu şeye bir göz atabilirsiniz: http://www.techonthenet.com/oracle/cursors/declare.php. –
şimdi daha iyi olduğunu 'FONKSİYON returneaza_id_curs (nume VARCHAR2) DÖNÜŞ SAYISI CURSOR c1 (nume) IS didaktik d SEC d.id_curs p.nume = nume p.id_prof profesori s d.id_prof = artır olarak; v_id NUMARASI (3); BEGIN open c1; LOOP c1 (sayı) v_id'ye getirilir; C1% notfound olduğunda çıkışı; END LOOP; RETURN v_id; END returneaza_id_curs; – katy