All pastes #50014 Raw Edit

Something

public text v1 · immutable
#50014 ·published 2006-04-19 21:30 UTC
rendered paste body
CREATE OR REPLACE PACKAGE exc4 AS
    currentYear NUMBER;
    PROCEDURE requireValidYear;
    PROCEDURE removeTeachers(subjectDesc VARCHAR2);
    FUNCTION getTeacherCount(subjectID NUMBER) RETURN NUMBER;
    PROCEDURE addTeacherToSubject(subjectID NUMBER, teacherID NUMBER, semester NUMBER, 
                                  semestertype NUMBER, orderd NUMBER);
    FUNCTION subjectsWithoutTeachersCount RETURN NUMBER;
    PROCEDURE createTeacherSubjectsTable;
END exc4;

CREATE OR REPLACE PACKAGE BODY exc4 AS
    PROCEDURE requireValidYear IS
    BEGIN
        IF currentYear < 1990 THEN
            raise_application_error(-20000, 'Invalid year given!');
        END IF;
        -- DBMS_OUTPUT.PUT_LINE('Hello Wolrd = ' || exc4.currentYear);
    END;
    
    PROCEDURE removeTeachers(subjectDesc VARCHAR2) IS
        subject_id NUMBER;
    BEGIN
        -- check if a valid year is defined
        requireValidYear();
        
        -- selecting the subject id belonging to the given subject description
        SELECT fach_id INTO subject_id FROM faecher f
        WHERE f.kbz = subjectDesc;
        
        -- removing all teachers linked to the subject
        DELETE FROM unterricht_tw04n181 u WHERE u.fach_id = subject_id
        AND u.studienjahr = currentYear;
    END;
    
    FUNCTION getTeacherCount(subjectID NUMBER) RETURN NUMBER IS
        teacher_count NUMBER;
    BEGIN
        -- check if a valid year is defined
        requireValidYear();
        
        -- selecting the number of teachers linked with the given
        -- subject
        SELECT COUNT(*) INTO teacher_count FROM unterricht_tw04n181 u
        WHERE u.fach_id = subjectID AND u.studienjahr = currentYear;
        
        RETURN teacher_count;
    END;
    
    PROCEDURE addTeacherToSubject(subjectID NUMBER, teacherID NUMBER, semester NUMBER, 
                                  semestertype NUMBER, orderd NUMBER) IS
    BEGIN
        -- check if a valid year is defined
        requireValidYear();
        
        -- check if there are less than 4 teachers added yet
        IF getTeacherCount(subjectID) >= 4 THEN
            raise_application_error(-20001, '4 teachers already added to the subject! No more allowed.');
        END IF;
        
        -- add a teacher to the subject
        INSERT INTO unterricht_tw04n181 (unterricht_id, personen_id, fach_id, studienjahr, semester, semestertyp, reihung)
        VALUES (unterricht_tw04n181_seq.nextval, subjectID, teacherID, currentYear, semester, semestertype, orderd);
    END;
    
    FUNCTION subjectsWithoutTeachersCount RETURN NUMBER IS
        swnt NUMBER;
    BEGIN
        SELECT COUNT(*) INTO swnt FROM faecher f WHERE (
            SELECT COUNT(*) FROM unterricht_tw04n181 u
            WHERE u.fach_id = f.fach_id AND 
                  u.studienjahr = currentYear) = 0;
        RETURN swnt;
    END;
    
    PROCEDURE createTeacherSubjectsTable AS
        stmt VARCHAR2(1000) := 'CREATE TABLE teachersubjects (teacher VARCHAR2(255), ';
        total NUMBER := 0;
        idx NUMBER := 0;
        id NUMBER;

        CURSOR faecher IS
            SELECT * FROM faecher f;

    BEGIN
        DBMS_OUTPUT.ENABLE(1000000);
        FOR fach IN faecher LOOP
            total := total + 1;
        END LOOP;
        FOR fach IN faecher LOOP
            stmt := stmt || '"' || fach.kbz || '" NUMBER';
            IF idx < total-1  THEN
                stmt := stmt || ',';
            END IF;
            idx := idx + 1;
        END LOOP;
        stmt := stmt || ')';
        -- EXECUTE IMMEDIATE 'DROP TABLE IF EXISTS teachersubjects';
        EXECUTE IMMEDIATE stmt;
        -- DBMS_OUTPUT.PUT_LINE(stmt);

    END;
    
    PROCEDURE
END exc4;