2015-05-02 3 views
0

Я новичок в создании пакетов. У меня есть 2 функции и 1 процедура. Все они работают индивидуально и компилируются без ошибок. Когда я бросаю их вместе в пакет, я получаю сообщение об ошибке «Обнаруженный символ создания», ссылающийся на создание, используемое для тела пакета. Может ли кто-нибудь объяснить мне, что я делаю неправильно?PLSQL Создание пакета, содержащего 2 функции и 1 процедуру

CREATE OR REPLACE PACKAGE STUDENT_PKG IS 

    FUNCTION CALCULATE_GPA 
    (STUDENT_ID1 IN NUMBER) 
     RETURN NUMBER; 

    FUNCTION CALCULATE_HOURS 
(STUDENT_ID1 IN NUMBER) 
    RETURN NUMBER; 

    PROCEDURE UPDATE_STUDENTS; 
END; 

CREATE OR REPLACE PACKAGE BODY STUDENT_PKG IS 

FUNCTION CALCULATE_GPA 
    (STUDENT_ID1 IN NUMBER) 
    RETURN NUMBER 
    IS 
GPA Number(3,2); 
STUDENT_ID2 NUMBER(6); 
BEGIN 
Select To_Char(NVL(Sum(Points)/Sum(Credit_Hours),0),'0.99') GPA INTO GPA 
    from 
    (Select Enrollment.Student_ID, Enrollment.Grade, Grade_Value*Credit_Hours Points, Credit_hours, Enrollment.Course_Number 
     from Enrollment 
     left join Grade on Grade.Grade=Enrollment.Grade 
     left join Section on (Enrollment.Term_Code=Section.Term_Code and 
        Enrollment.Subject_Code=Section.Subject_code and 
        Enrollment.Course_Number=Section.Course_Number and 
        Enrollment.Section=Section.Section) 
     left join Course on (Section.Subject_Code=Course.Subject_Code and 
        Section.Course_Number=Course.Course_Number)) First 
Where Student_Id=Student_ID1     
    group by Student_ID; 
RETURN GPA; 
END CALCLUATE_GPA; 

FUNCTION CALCULATE_HOURS 
(STUDENT_ID1 IN NUMBER) 
    RETURN NUMBER AS 
Credit_Hours1 Number(2); 
BEGIN 
    Select SUM(CASE WHEN GRADE IS NULL THEN 0 ELSE CREDIT_HOURS END) into Credit_Hours1 
    from Course 
     join Enrollment on course.course_number=Enrollment.course_number 
     where Student_id=Student_Id1 
      GROUP BY STUDENT_ID; 
    RETURN Credit_Hours1; 
END CALCULATE_HOURS; 

PROCEDURE UPDATE_STUDENTS AS 
GPA1 NUMBER (3,2); 
CREDIT_HOURS1 NUMBER(2); 
STUDENT_ID1 NUMBER(6):=333333; 
BEGIN 
    GPA1:=CALCULATE_GPA(STUDENT_ID1); 
    CREDIT_HOURS1:=CALCULATE_HOURS(STUDENT_ID1); 
    UPDATE STUDENT 
     SET GPA=GPA1, 
     CREDIT_HOURS=CREDIT_HOURS1 
     WHERE STUDENT_ID=STUDENT_ID1; 
END UPDATE_STUDENTS; 

END STUDENT_PKG; 
+0

Вы случайно используете это из клиента SQL * Plus? –

ответ

0

Вы должны прекратить PACKAGE и PACKAGE BODY блоки с косой черты (/), как это:

CREATE OR REPLACE PACKAGE STUDENT_PKG IS 
    /* Header declarations */ 
END; 
/
CREATE OR REPLACE PACKAGE BODY STUDENT_PKG IS 
    /* PKG BODY here */ 
END STUDENT_PKG; 
/

Если вы используете код из SQLDeveloper, вы должны выбрать «Запуск от имени сценария ". This thread дает подробное объяснение того, когда/почему требуется косая черта.

Смежные вопросы