2016-03-30 22 views
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?

+0

İş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

+0

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. –

+0

ş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

cevap

0

onlara uygun masa ve yabancı anahtarlar varsa bir prosedür gerekmez:

CREATE TABLE People (
    ID   INT PRIMARY KEY, 
    First_Name VARCHAR2(100), 
    Last_Name VARCHAR2(100) 
); 

CREATE TABLE Students(
    ID    INT PRIMARY KEY REFERENCES People(ID), 
    Enrollment_Date DATE 
); 

CREATE TABLE Staff(
    ID  INT PRIMARY KEY REFERENCES People(ID), 
    Salary NUMBER, 
    Office VARCHAR2(10) 
); 

CREATE TABLE Courses(
    ID  INT PRIMARY KEY, 
    Title VARCHAR2(50) 
); 

CREATE TABLE Course_Teachers(
    ProfessorID INT REFERENCES Staff(ID), 
    CourseID INT REFERENCES Courses(ID), 
    Class_Name VARCHAR2(50), 
    PRIMARY KEY (ProfessorID, CourseID) 
); 

CREATE TABLE Enrollments(
    ProfessorID INT, 
    CourseID INT, 
    StudentID INT REFERENCES Students (ID), 
    FOREIGN KEY (ProfessorID, CourseID) REFERENCES Course_Teachers (ProfessorID, CourseID), 
    PRIMARY KEY (ProfessorID, CourseID, StudentID) 
); 

CREATE TABLE Assignments(
    ProfessorID  INT REFERENCES Staff(ID), 
    CourseID   INT REFERENCES Courses(ID), 
    AssignmentNumber INT, 
    GradePercentage INT, 
    Name    VARCHAR2(50), 
    FOREIGN KEY (ProfessorID, CourseID) REFERENCES Course_Teachers (ProfessorID, CourseID), 
    PRIMARY KEY (ProfessorID, CourseID, AssignmentNumber) 
); 

CREATE TABLE Grades(
    ProfessorID  INT REFERENCES Staff(ID), 
    CourseID   INT REFERENCES Courses(ID), 
    StudentID  INT REFERENCES Students (ID), 
    AssignmentNumber INT, 
    Grade   INT, 
    FOREIGN KEY (ProfessorID, CourseID, StudentID) REFERENCES Enrollments (ProfessorID, CourseID, StudentID), 
    FOREIGN KEY (ProfessorID, CourseID, AssignmentNumber) REFERENCES Assignments (ProfessorID, CourseID, AssignmentNumber), 
    PRIMARY KEY (ProfessorID, CourseID, StudentID, AssignmentNumber) 
); 
İlgili konular