added Übungszettel 11
This commit is contained in:
145
Uebungszettel_10.sql
Normal file
145
Uebungszettel_10.sql
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
--Aufgabe 1
|
||||||
|
|
||||||
|
--a)Schon verhanden;Create or Replace
|
||||||
|
--b)so oft wie es den ZIP Code 02189 gibt
|
||||||
|
--c)so oft wie Spalten in student sind weil der Trigger auf die Tabelle ist
|
||||||
|
--d) wenn die ZIP null ist
|
||||||
|
|
||||||
|
CREATE OR REPLACE TRIGGER student_au
|
||||||
|
AFTER UPDATE ON STUDENT
|
||||||
|
FOR EACH ROW
|
||||||
|
WHEN (NVL(NEW. ZIP , ' ') <> OLD. ZIP )
|
||||||
|
BEGIN
|
||||||
|
UPDATE student
|
||||||
|
SET zip = '01247'
|
||||||
|
WHERE zip = '02189';
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
--Aufgabe 2
|
||||||
|
|
||||||
|
--a) ja weil zip eventuell mit null verglichen wird
|
||||||
|
--b)
|
||||||
|
CREATE OR REPLACE TRIGGER instructor_bi
|
||||||
|
BEFORE INSERT ON INSTRUCTOR
|
||||||
|
FOR EACH ROW
|
||||||
|
DECLARE
|
||||||
|
v_work_zip CHAR(1);
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
:NEW.CREATED_BY := USER;
|
||||||
|
:NEW.CREATED_DATE := SYSDATE;
|
||||||
|
:NEW.MODIFIED_BY := USER;
|
||||||
|
:NEW.MODIFIED_DATE := SYSDATE;
|
||||||
|
|
||||||
|
IF(:NEW.ZIP IS NULL) THEN
|
||||||
|
RAISE_APPLICATION_ERROR (-20001, 'Zip code is required!');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
SELECT 'Y'
|
||||||
|
INTO v_work_zip
|
||||||
|
FROM zipcode
|
||||||
|
WHERE zip = :NEW.ZIP;
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN NO_DATA_FOUND THEN
|
||||||
|
RAISE_APPLICATION_ERROR (-20000, 'Zip code is not valid!');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
--c)
|
||||||
|
CREATE OR REPLACE TRIGGER instructor_bi
|
||||||
|
BEFORE INSERT ON INSTRUCTOR
|
||||||
|
FOR EACH ROW
|
||||||
|
DECLARE
|
||||||
|
v_work_zip CHAR(1);
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
:NEW.instructor_id := INSTRUCTOR_ID_SEQ.NEXTVAL;
|
||||||
|
:NEW.CREATED_BY := USER;
|
||||||
|
:NEW.CREATED_DATE := SYSDATE;
|
||||||
|
:NEW.MODIFIED_BY := USER;
|
||||||
|
:NEW.MODIFIED_DATE := SYSDATE;
|
||||||
|
|
||||||
|
IF(:NEW.ZIP IS NULL) THEN
|
||||||
|
RAISE_APPLICATION_ERROR (-20001, 'Zip code is required!');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
SELECT 'Y'
|
||||||
|
INTO v_work_zip
|
||||||
|
FROM zipcode
|
||||||
|
WHERE zip = :NEW.ZIP;
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN NO_DATA_FOUND THEN
|
||||||
|
RAISE_APPLICATION_ERROR (-20001, 'Zip code is not valid!');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
--Aufgabe 3
|
||||||
|
--a)Before Insert; ROW(FOR EACH ROW)
|
||||||
|
--b)weil man NEW sonst nicht verwenden kann
|
||||||
|
-- --c):NEW.COURSE_NO := COURSE_NO_SEQ.NEXTVAL;
|
||||||
|
-- :NEW.CREATED_BY := USER;
|
||||||
|
-- :NEW.CREATED_DATE := SYSDATE;
|
||||||
|
-- :NEW.MODIFIED_BY := USER;
|
||||||
|
-- :NEW.MODIFIED_DATE := SYSDATE;
|
||||||
|
--d)
|
||||||
|
CREATE OR REPLACE TRIGGER enrollment_bi
|
||||||
|
BEFORE INSERT ON ENROLLMENT
|
||||||
|
FOR EACH ROW
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
:NEW.CREATED_BY := USER;
|
||||||
|
:NEW.CREATED_DATE := SYSDATE;
|
||||||
|
:NEW.MODIFIED_BY := USER;
|
||||||
|
:NEW.MODIFIED_DATE := SYSDATE;
|
||||||
|
:NEW.ENROLL_DATE := SYSDATE;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
--Aufgabe 4
|
||||||
|
|
||||||
|
CREATE OR REPLACE TRIGGER course_bi
|
||||||
|
BEFORE INSERT ON COURSE
|
||||||
|
FOR EACH ROW
|
||||||
|
DECLARE
|
||||||
|
v_temp COURSE.COURSE_NO%type;
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
Select COST into v_temp FROM COURSE
|
||||||
|
WHERE COURSE_NO = :NEW.COURSE_NO;
|
||||||
|
|
||||||
|
:NEW.COURSE_NO := COURSE_NO_SEQ.NEXTVAL;
|
||||||
|
:NEW.CREATED_BY := USER;
|
||||||
|
:NEW.CREATED_DATE := SYSDATE;
|
||||||
|
:NEW.MODIFIED_BY := USER;
|
||||||
|
:NEW.MODIFIED_DATE := SYSDATE;
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN NO_DATA_FOUND THEN
|
||||||
|
RAISE_APPLICATION_ERROR (-20003, 'Prerequesite Course not existing!');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
--Aufgabe 5
|
||||||
|
|
||||||
|
CREATE OR REPLACE TRIGGER course_bi
|
||||||
|
BEFORE INSERT ON COURSE
|
||||||
|
FOR EACH ROW
|
||||||
|
DECLARE
|
||||||
|
v_temp COURSE.COURSE_NO%type;
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
Select COST into v_temp FROM COURSE
|
||||||
|
WHERE COURSE_NO = :NEW.COURSE_NO;
|
||||||
|
|
||||||
|
:NEW.COURSE_NO := COURSE_NO_SEQ.NEXTVAL;
|
||||||
|
:NEW.CREATED_BY := USER;
|
||||||
|
:NEW.CREATED_DATE := SYSDATE;
|
||||||
|
:NEW.MODIFIED_BY := USER;
|
||||||
|
:NEW.MODIFIED_DATE := SYSDATE;
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN NO_DATA_FOUND THEN
|
||||||
|
RAISE_APPLICATION_ERROR (-20003, 'Prerequesite Course not existing!');
|
||||||
|
END;
|
||||||
|
/
|
||||||
135
Uebungszettel_11.sql
Normal file
135
Uebungszettel_11.sql
Normal file
@@ -0,0 +1,135 @@
|
|||||||
|
Drop TABLE Artikel CASCADE CONSTRAINTS;
|
||||||
|
Drop TABLE Bestellung CASCADE CONSTRAINTS;
|
||||||
|
Drop TABLE Nachbestellung CASCADE CONSTRAINTS;
|
||||||
|
|
||||||
|
-- Create the tables
|
||||||
|
CREATE TABLE Artikel (
|
||||||
|
Artikel_ID NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||||
|
Name VARCHAR2(60) NOT NULL,
|
||||||
|
Preis NUMBER(10, 2) NOT NULL,
|
||||||
|
Bestand_Ist NUMBER NOT NULL,
|
||||||
|
Bestand_Min NUMBER NOT NULL,
|
||||||
|
Bestand_Max NUMBER NOT NULL
|
||||||
|
);
|
||||||
|
CREATE TABLE Bestellung (
|
||||||
|
ID NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||||
|
Bestellnummer VARCHAR2(9) NOT NULL,
|
||||||
|
Pos NUMBER NOT NULL,
|
||||||
|
Artikel_ID NUMBER,
|
||||||
|
Menge NUMBER NOT NULL,
|
||||||
|
Pos_Gesamtpreis NUMBER(10, 2) NOT NULL,
|
||||||
|
Gesamtpreis NUMBER(10, 2) NOT NULL,
|
||||||
|
Versendet NUMBER(1) NOT NULL,
|
||||||
|
FOREIGN KEY (Artikel_ID) REFERENCES Artikel(Artikel_ID)
|
||||||
|
);
|
||||||
|
CREATE TABLE Nachbestellung (
|
||||||
|
Nachbestellnummer NUMBER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
|
||||||
|
Artikel_ID NUMBER,
|
||||||
|
Menge NUMBER NOT NULL,
|
||||||
|
FOREIGN KEY (Artikel_ID) REFERENCES Artikel(Artikel_ID)
|
||||||
|
);
|
||||||
|
|
||||||
|
INSERT INTO Artikel (Name, Preis, Bestand_Ist, Bestand_Min, Bestand_Max) VALUES ('Artikel1', 8.99, 60, 12, 120);
|
||||||
|
INSERT INTO Artikel (Name, Preis, Bestand_Ist, Bestand_Min, Bestand_Max) VALUES ('Artikel2', 13.49, 25, 6, 60);
|
||||||
|
INSERT INTO Artikel (Name, Preis, Bestand_Ist, Bestand_Min, Bestand_Max) VALUES ('Artikel3', 6.99, 110, 22, 220);
|
||||||
|
INSERT INTO Artikel (Name, Preis, Bestand_Ist, Bestand_Min, Bestand_Max) VALUES ('Artikel4', 23.00, 12, 3, 36);
|
||||||
|
INSERT INTO Artikel (Name, Preis, Bestand_Ist, Bestand_Min, Bestand_Max) VALUES ('Artikel5', 4.75, 80, 16, 160);
|
||||||
|
INSERT INTO Artikel (Name, Preis, Bestand_Ist, Bestand_Min, Bestand_Max) VALUES ('Artikel6', 11.30, 45, 9, 90);
|
||||||
|
-- Trigger to set Pos before insert on Bestellung
|
||||||
|
CREATE OR REPLACE TRIGGER set_pos_before_insert
|
||||||
|
BEFORE INSERT ON Bestellung
|
||||||
|
FOR EACH ROW
|
||||||
|
DECLARE
|
||||||
|
max_pos NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT NVL(MAX(Pos), 0) INTO max_pos FROM Bestellung WHERE Bestellnummer = :NEW.Bestellnummer;
|
||||||
|
:NEW.Pos := max_pos + 1;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Trigger to update Gesamtpreis after insert on Bestellung
|
||||||
|
CREATE OR REPLACE TRIGGER update_gesamtpreis_after_insert
|
||||||
|
AFTER INSERT ON Bestellung
|
||||||
|
FOR EACH ROW
|
||||||
|
DECLARE
|
||||||
|
PRAGMA AUTONOMOUS_TRANSACTION;
|
||||||
|
gesamt NUMBER(10, 2);
|
||||||
|
BEGIN
|
||||||
|
SELECT SUM(Pos_Gesamtpreis) INTO gesamt FROM Bestellung WHERE Bestellnummer = :NEW.Bestellnummer;
|
||||||
|
UPDATE Bestellung SET Gesamtpreis = gesamt WHERE Bestellnummer = :NEW.Bestellnummer;
|
||||||
|
COMMIT;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
SELECT * FROM USER_ERRORS WHERE NAME = 'UPDATE_BESTAND_AFTER_UPDATE';
|
||||||
|
|
||||||
|
-- Trigger to update Bestand_Ist after update on Bestellung
|
||||||
|
CREATE OR REPLACE TRIGGER update_bestand_after_update
|
||||||
|
AFTER UPDATE ON Bestellung
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
IF :NEW.Versendet = 1 AND :OLD.Versendet = 0 THEN
|
||||||
|
UPDATE Artikel SET Bestand_Ist = Bestand_Ist - :NEW.Menge WHERE Artikel_ID = :NEW.Artikel_ID;
|
||||||
|
DECLARE
|
||||||
|
v_Bestand_Ist NUMBER;
|
||||||
|
v_Bestand_Min NUMBER;
|
||||||
|
v_Bestand_Max NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT Bestand_Ist, Bestand_Min, Bestand_Max INTO v_Bestand_Ist, v_Bestand_Min, v_Bestand_Max FROM Artikel WHERE Artikel_ID = :NEW.Artikel_ID;
|
||||||
|
IF v_Bestand_Ist < v_Bestand_Min THEN
|
||||||
|
INSERT INTO Nachbestellung (Artikel_ID, Menge)
|
||||||
|
VALUES (:NEW.Artikel_ID, v_Bestand_Max - v_Bestand_Ist);
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Trigger to prevent modification of shipped orders
|
||||||
|
CREATE OR REPLACE TRIGGER prevent_modification_after_shipment
|
||||||
|
BEFORE UPDATE OR DELETE ON Bestellung
|
||||||
|
FOR EACH ROW
|
||||||
|
BEGIN
|
||||||
|
IF :OLD.Versendet = 1 THEN
|
||||||
|
RAISE_APPLICATION_ERROR(-20001, 'Cannot modify shipped orders');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Trigger to prevent insert outside business hours
|
||||||
|
CREATE OR REPLACE TRIGGER prevent_insert_outside_business_hours
|
||||||
|
BEFORE INSERT ON Bestellung
|
||||||
|
FOR EACH ROW
|
||||||
|
DECLARE
|
||||||
|
current_time TIMESTAMP;
|
||||||
|
BEGIN
|
||||||
|
SELECT SYSTIMESTAMP INTO current_time FROM DUAL;
|
||||||
|
IF TO_CHAR(current_time, 'HH24:MI:SS') NOT BETWEEN '08:00:00' AND '16:00:00' THEN
|
||||||
|
RAISE_APPLICATION_ERROR(-20002, 'Orders can only be placed during business hours (08:00 - 16:00)');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
TRUNCATE TABLE BESTELLUNG;
|
||||||
|
|
||||||
|
INSERT INTO Bestellung (Bestellnummer, Pos, ARTIKEL_ID, Menge, POS_GESAMTPREIS, Gesamtpreis, Versendet)
|
||||||
|
VALUES ('B2025001', null, 1, 2, 1999.98, 3.98, 0);
|
||||||
|
|
||||||
|
INSERT INTO Bestellung (Bestellnummer, Pos, ARTIKEL_ID, Menge, POS_GESAMTPREIS, Gesamtpreis, Versendet)
|
||||||
|
VALUES ('B2025001', null, 3, 1, 49.99, 2.97, 0);
|
||||||
|
|
||||||
|
INSERT INTO Bestellung (Bestellnummer, Pos, ARTIKEL_ID, Menge, POS_GESAMTPREIS, Gesamtpreis, Versendet)
|
||||||
|
VALUES ('B2025001', null, 3, 1, 49.99, 1.33, 0);
|
||||||
|
|
||||||
|
INSERT INTO Bestellung (Bestellnummer, Pos, ARTIKEL_ID, Menge, POS_GESAMTPREIS, Gesamtpreis, Versendet)
|
||||||
|
VALUES ('B2025001', null, 3, 1, 1.99, 1.33, 0);
|
||||||
|
|
||||||
|
INSERT INTO Bestellung (Bestellnummer, Pos, ARTIKEL_ID, Menge, POS_GESAMTPREIS, Gesamtpreis, Versendet)
|
||||||
|
VALUES ('B2025002', null, 3, 1, 1.99, 1.33, 0);
|
||||||
|
INSERT INTO Bestellung (Bestellnummer, Pos, ARTIKEL_ID, Menge, POS_GESAMTPREIS, Gesamtpreis, Versendet)
|
||||||
|
VALUES ('B2025002', null, 3, 1, 50.99, 1.33, 0);
|
||||||
|
INSERT INTO Bestellung (Bestellnummer, Pos, ARTIKEL_ID, Menge, POS_GESAMTPREIS, Gesamtpreis, Versendet)
|
||||||
|
VALUES ('B2025002', null, 3, 1, 60.99, 1.33, 0);
|
||||||
|
|
||||||
|
|
||||||
|
SELECT * FROM BESTELLUNG;
|
||||||
376
Uebungszettel_5.sql
Normal file
376
Uebungszettel_5.sql
Normal file
@@ -0,0 +1,376 @@
|
|||||||
|
-- Aufgabe 5.1
|
||||||
|
DECLARE
|
||||||
|
v_total NUMBER;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO v_total
|
||||||
|
FROM enrollment e
|
||||||
|
JOIN section s USING (section_id)
|
||||||
|
WHERE s.course_no = 25
|
||||||
|
AND s.section_no = 1;
|
||||||
|
|
||||||
|
-- check if section 1 of course 25 is full
|
||||||
|
IF v_total >= 15 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Section 1 of course 25 is full');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Section 1 of course 25 is not full');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Aufgabe 5.1 (a)
|
||||||
|
-- Ausgabe: 'Section 1 of course 25 is full'
|
||||||
|
|
||||||
|
-- Aufgabe 5.1 (b)
|
||||||
|
-- Ausgabe: 'Section 1 of course 25 is not full'
|
||||||
|
|
||||||
|
-- Aufgabe 5.1 (c)
|
||||||
|
-- Ausgabe: 'Section 1 of course 25 is not full'
|
||||||
|
|
||||||
|
-- Aufgabe 5.1 (d)
|
||||||
|
DECLARE
|
||||||
|
v_total NUMBER;
|
||||||
|
v_course_no NUMBER := &course_no;
|
||||||
|
v_section_no NUMBER := §ion_no;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO v_total
|
||||||
|
FROM enrollment e
|
||||||
|
JOIN section s USING (section_id)
|
||||||
|
WHERE s.course_no = v_course_no
|
||||||
|
AND s.section_no = v_section_no;
|
||||||
|
|
||||||
|
-- check if section is full
|
||||||
|
IF v_total >= 15 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Section ' || v_section_no || ' of course ' || v_course_no || ' is full');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Section ' || v_section_no || ' of course ' || v_course_no || ' is not full');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('There are ' || (15 - v_total) || ' places left');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
-- Aufgabe 5.1 (e)
|
||||||
|
DECLARE
|
||||||
|
v_total NUMBER;
|
||||||
|
v_course_no NUMBER := &course_no;
|
||||||
|
v_section_no NUMBER := §ion_no;
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO v_total
|
||||||
|
FROM enrollment e
|
||||||
|
JOIN section s USING (section_id)
|
||||||
|
WHERE s.course_no = v_course_no
|
||||||
|
AND s.section_no = v_section_no;
|
||||||
|
|
||||||
|
-- check if section is full
|
||||||
|
IF v_total >= 15 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Section ' || v_section_no || ' of course ' || v_course_no || ' is full');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Section ' || v_section_no || ' of course ' || v_course_no || ' is not full');
|
||||||
|
DBMS_OUTPUT.PUT_LINE('There are ' || (15 - v_total) || ' places left');
|
||||||
|
END IF;
|
||||||
|
EXCEPTION
|
||||||
|
WHEN NO_DATA_FOUND THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('There is no such section in the course');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Aufgabe 5.2
|
||||||
|
DECLARE
|
||||||
|
v_student_id NUMBER := 102;
|
||||||
|
v_section_id NUMBER := 89;
|
||||||
|
v_final_grade NUMBER;
|
||||||
|
v_letter_grade CHAR(1);
|
||||||
|
BEGIN
|
||||||
|
SELECT final_grade
|
||||||
|
INTO v_final_grade
|
||||||
|
FROM enrollment
|
||||||
|
WHERE student_id = v_student_id
|
||||||
|
AND section_id = v_section_id;
|
||||||
|
|
||||||
|
IF v_final_grade BETWEEN 90 AND 100 THEN
|
||||||
|
v_letter_grade := 'A';
|
||||||
|
ELSIF v_final_grade BETWEEN 80 AND 89 THEN
|
||||||
|
v_letter_grade := 'B';
|
||||||
|
ELSIF v_final_grade BETWEEN 70 AND 79 THEN
|
||||||
|
v_letter_grade := 'C';
|
||||||
|
ELSIF v_final_grade BETWEEN 60 AND 69 THEN
|
||||||
|
v_letter_grade := 'D';
|
||||||
|
ELSE
|
||||||
|
v_letter_grade := 'F';
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Letter grade is: '|| v_letter_grade);
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN NO_DATA_FOUND THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('There is no such student or section');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
-- Aufgabe 5.2 (a)
|
||||||
|
-- Aufgabe 5.2 (a) (1)
|
||||||
|
-- Ausgabe: 'Letter grade is: B'
|
||||||
|
|
||||||
|
-- Aufgabe 5.2 (a) (2)
|
||||||
|
-- Ausgabe: 'There is no such student or section'
|
||||||
|
|
||||||
|
-- Aufgabe 5.2 (a) (3)
|
||||||
|
-- Ausgabe: 'Letter grade is: F'
|
||||||
|
|
||||||
|
-- Aufgabe 5.2 (b)
|
||||||
|
DECLARE
|
||||||
|
v_student_id NUMBER := 102;
|
||||||
|
v_section_id NUMBER := 89;
|
||||||
|
v_final_grade NUMBER;
|
||||||
|
v_letter_grade CHAR(1);
|
||||||
|
BEGIN
|
||||||
|
SELECT final_grade
|
||||||
|
INTO v_final_grade
|
||||||
|
FROM enrollment
|
||||||
|
WHERE student_id = v_student_id
|
||||||
|
AND section_id = v_section_id;
|
||||||
|
|
||||||
|
IF v_final_grade IS NULL THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('v final grade is null');
|
||||||
|
ELSIF v_final_grade >= 90 THEN
|
||||||
|
v_letter_grade := 'A';
|
||||||
|
ELSIF v_final_grade >= 80 THEN
|
||||||
|
v_letter_grade := 'B';
|
||||||
|
ELSIF v_final_grade >= 70 THEN
|
||||||
|
v_letter_grade := 'C';
|
||||||
|
ELSIF v_final_grade >= 60 THEN
|
||||||
|
v_letter_grade := 'D';
|
||||||
|
ELSE
|
||||||
|
v_letter_grade := 'F';
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Letter grade is: '|| v_letter_grade);
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN NO_DATA_FOUND THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('There is no such student or section');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Aufgabe 5.2 (c)
|
||||||
|
DECLARE
|
||||||
|
v_student_id NUMBER := &student_id;
|
||||||
|
v_section_id NUMBER := §ion_id;
|
||||||
|
v_final_grade NUMBER;
|
||||||
|
v_letter_grade CHAR(1);
|
||||||
|
BEGIN
|
||||||
|
SELECT final_grade
|
||||||
|
INTO v_final_grade
|
||||||
|
FROM enrollment
|
||||||
|
WHERE student_id = v_student_id
|
||||||
|
AND section_id = v_section_id;
|
||||||
|
|
||||||
|
IF v_final_grade IS NULL THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('v final grade is null');
|
||||||
|
ELSIF v_final_grade >= 90 THEN
|
||||||
|
v_letter_grade := 'A';
|
||||||
|
ELSIF v_final_grade >= 80 THEN
|
||||||
|
v_letter_grade := 'B';
|
||||||
|
ELSIF v_final_grade >= 70 THEN
|
||||||
|
v_letter_grade := 'C';
|
||||||
|
ELSIF v_final_grade >= 60 THEN
|
||||||
|
v_letter_grade := 'D';
|
||||||
|
ELSE
|
||||||
|
v_letter_grade := 'F';
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Letter grade is: '|| v_letter_grade);
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN NO_DATA_FOUND THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('There is no such student or section');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Aufgabe 5.2 (d)
|
||||||
|
DECLARE
|
||||||
|
v_student_id NUMBER := &student_id;
|
||||||
|
v_section_id NUMBER := §ion_id;
|
||||||
|
v_final_grade NUMBER;
|
||||||
|
v_letter_grade CHAR(1);
|
||||||
|
BEGIN
|
||||||
|
SELECT final_grade
|
||||||
|
INTO v_final_grade
|
||||||
|
FROM enrollment
|
||||||
|
WHERE student_id = v_student_id
|
||||||
|
AND section_id = v_section_id;
|
||||||
|
|
||||||
|
IF v_final_grade IS NULL THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('v final grade is null');
|
||||||
|
ELSIF v_final_grade >= 90 THEN
|
||||||
|
v_letter_grade := 'A';
|
||||||
|
ELSIF v_final_grade >= 80 THEN
|
||||||
|
v_letter_grade := 'B';
|
||||||
|
ELSIF v_final_grade >= 70 THEN
|
||||||
|
v_letter_grade := 'C';
|
||||||
|
ELSIF v_final_grade >= 60 THEN
|
||||||
|
v_letter_grade := 'D';
|
||||||
|
ELSE
|
||||||
|
v_letter_grade := 'F';
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Letter grade is: '|| v_letter_grade);
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN NO_DATA_FOUND THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('There is no such student or section');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Aufgabe 5.3
|
||||||
|
DECLARE
|
||||||
|
v_temp_in NUMBER := &sv_temp_in;
|
||||||
|
v_scale_in CHAR := '&sv_scale_in';
|
||||||
|
v_temp_out NUMBER;
|
||||||
|
v_scale_out CHAR;
|
||||||
|
BEGIN
|
||||||
|
IF v_scale_in != 'C' AND v_scale_in != 'F' THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('This is not a valid scale');
|
||||||
|
ELSE
|
||||||
|
IF v_scale_in = 'C' THEN
|
||||||
|
v_temp_out := ( (9 * v_temp_in) / 5 ) + 32;
|
||||||
|
v_scale_out := 'F';
|
||||||
|
ELSE
|
||||||
|
v_temp_out := ( (v_temp_in - 32) * 5 ) / 9;
|
||||||
|
v_scale_out := 'C';
|
||||||
|
END IF;
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('New scale is: '|| v_scale_out);
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('New temperature is: '|| v_temp_out);
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Aufgabe 5.3 (a)
|
||||||
|
-- Ausgabe:
|
||||||
|
-- New scale is: F
|
||||||
|
-- New temperature is: 212
|
||||||
|
|
||||||
|
-- Aufgabe 5.3 (b)
|
||||||
|
-- Ausgabe:
|
||||||
|
-- ORA-06502: PL/SQL: numeric or value error: character to number conversion error
|
||||||
|
|
||||||
|
-- Aufgabe 5.3 (c)
|
||||||
|
-- Ausgabe:
|
||||||
|
-- This is not a valid scale
|
||||||
|
|
||||||
|
-- Aufgabe 5.3 (d)
|
||||||
|
DECLARE
|
||||||
|
v_temp_in NUMBER := &sv_temp_in;
|
||||||
|
v_scale_in CHAR := '&sv_scale_in';
|
||||||
|
v_temp_out NUMBER;
|
||||||
|
v_scale_out CHAR;
|
||||||
|
BEGIN
|
||||||
|
IF v_scale_in != 'C' AND v_scale_in != 'F' THEN
|
||||||
|
v_temp_out := 0;
|
||||||
|
v_scale_out := 'C';
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('This is not a valid scale');
|
||||||
|
ELSE
|
||||||
|
IF v_scale_in = 'C' THEN
|
||||||
|
v_temp_out := ( (9 * v_temp_in) / 5 ) + 32;
|
||||||
|
v_scale_out := 'F';
|
||||||
|
ELSE
|
||||||
|
v_temp_out := ( (v_temp_in - 32) * 5 ) / 9;
|
||||||
|
v_scale_out := 'C';
|
||||||
|
END IF;
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('New scale is: '|| v_scale_out);
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('New temperature is: '|| v_temp_out);
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Aufgabe 5.4
|
||||||
|
DECLARE
|
||||||
|
v_date DATE := TO_DATE('&sv_user_date', 'DD-MM-YYYY');
|
||||||
|
v_day VARCHAR2(1);
|
||||||
|
BEGIN
|
||||||
|
v_day := TO_CHAR(v_date, 'D');
|
||||||
|
CASE v_day
|
||||||
|
WHEN '1' THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Today is Sunday');
|
||||||
|
WHEN '2' THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Today is Monday');
|
||||||
|
WHEN '3' THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Today is Tuesday');
|
||||||
|
WHEN '4' THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Today is Wednesday');
|
||||||
|
WHEN '5' THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Today is Thursday');
|
||||||
|
WHEN '6' THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Today is Friday');
|
||||||
|
WHEN '7' THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Today is Saturday');
|
||||||
|
END CASE;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Aufgabe 5.5
|
||||||
|
DECLARE
|
||||||
|
v_counter BINARY_INTEGER := 0;
|
||||||
|
BEGIN
|
||||||
|
LOOP
|
||||||
|
-- increment loop counter by one
|
||||||
|
v_counter := v_counter + 1;
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('v_counter = '||v_counter);
|
||||||
|
-- if EXIT condition yields TRUE exit the loop
|
||||||
|
IF v_counter = 5 THEN
|
||||||
|
EXIT;
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Done...');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Aufgabe 5.6
|
||||||
|
DECLARE
|
||||||
|
v_counter BINARY_INTEGER := 1;
|
||||||
|
v_sum NUMBER := 0;
|
||||||
|
BEGIN
|
||||||
|
WHILE v_counter <= 10 LOOP
|
||||||
|
v_sum := v_sum + v_counter;
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Current sum is: '||v_sum);
|
||||||
|
-- increment loop counter by one
|
||||||
|
v_counter := v_counter + 1;
|
||||||
|
END LOOP;
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('The sum of integers between 1 '||'and 10 is: '||v_sum);
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Aufgabe 5.7
|
||||||
|
DECLARE
|
||||||
|
v_factorial NUMBER := 1;
|
||||||
|
BEGIN
|
||||||
|
FOR v_counter IN 1..10 LOOP
|
||||||
|
v_factorial := v_factorial * v_counter;
|
||||||
|
END LOOP;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Factorial of ten is: '||v_factorial);
|
||||||
|
END;
|
||||||
|
/
|
||||||
128
Uebungszettel_6.sql
Normal file
128
Uebungszettel_6.sql
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
-- Aufgabe 6.1
|
||||||
|
DECLARE
|
||||||
|
vr_zip ZIPCODE%ROWTYPE;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
SELECT *
|
||||||
|
INTO vr_zip
|
||||||
|
FROM zipcode
|
||||||
|
WHERE rownum < 2;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('City: '||vr_zip.city);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('State: '||vr_zip.state);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Zip: '||vr_zip.zip);
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Es wird die Stadt, der State und die Postleitzahl vom ersten Datensatz in der zipcode Tabelle angezeigt.
|
||||||
|
|
||||||
|
-- Aufgabe 6.2
|
||||||
|
DECLARE
|
||||||
|
CURSOR c_zip IS
|
||||||
|
SELECT *
|
||||||
|
FROM zipcode;
|
||||||
|
vr_zip ZIPCODE%ROWTYPE;
|
||||||
|
BEGIN
|
||||||
|
OPEN c_zip;
|
||||||
|
LOOP
|
||||||
|
FETCH c_zip INTO vr_zip;
|
||||||
|
EXIT WHEN c_zip%NOTFOUND;
|
||||||
|
DBMS_OUTPUT.PUT_LINE(vr_zip.zip || vr_zip.city || vr_zip.state);
|
||||||
|
END LOOP;
|
||||||
|
CLOSE c_zip;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Aufgabe 6.3
|
||||||
|
DECLARE
|
||||||
|
CURSOR c_student_name IS
|
||||||
|
SELECT *
|
||||||
|
FROM STUDENT
|
||||||
|
WHERE rownum <= 5;
|
||||||
|
vr_student STUDENT%ROWTYPE;
|
||||||
|
BEGIN
|
||||||
|
OPEN c_student_name;
|
||||||
|
LOOP
|
||||||
|
FETCH c_student_name INTO vr_student;
|
||||||
|
EXIT WHEN c_student_name%NOTFOUND;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Student name: ' || vr_student.FIRST_NAME || ' ' || vr_student.LAST_NAME);
|
||||||
|
END LOOP;
|
||||||
|
CLOSE c_student_name;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
|
||||||
|
-- Aufgabe 6.4
|
||||||
|
-- EXIT WHEN c_student%NOTFOUND;
|
||||||
|
|
||||||
|
-- DBMS_OUTPUT.PUT_LINE('STUDENT ID : '||v_sid);
|
||||||
|
-- END LOOP;
|
||||||
|
|
||||||
|
-- CLOSE c_student;
|
||||||
|
|
||||||
|
-- EXCEPTION
|
||||||
|
-- WHEN OTHERS THEN
|
||||||
|
-- IF c_student%ISOPEN THEN
|
||||||
|
-- CLOSE c_student;
|
||||||
|
-- END IF;
|
||||||
|
-- END;
|
||||||
|
--/
|
||||||
|
-- a): %NOTFOUND -> Prüft ob keine weiteren Einträge gefunden werden. %ISOPEN -> Prüft ob akutell noch der Cursor offen ist.
|
||||||
|
-- b):
|
||||||
|
DECLARE
|
||||||
|
CURSOR c_student IS
|
||||||
|
SELECT student_id
|
||||||
|
FROM student;
|
||||||
|
v_sid student.student_id%TYPE;
|
||||||
|
BEGIN
|
||||||
|
OPEN c_student;
|
||||||
|
LOOP
|
||||||
|
FETCH c_student INTO v_sid;
|
||||||
|
EXIT WHEN c_student%NOTFOUND;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Student Id: '||v_sid);
|
||||||
|
END LOOP;
|
||||||
|
CLOSE c_student;
|
||||||
|
EXCEPTION
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
IF c_student%ISOPEN THEN
|
||||||
|
CLOSE c_student;
|
||||||
|
END IF;
|
||||||
|
RAISE;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Aufgabe 6.5
|
||||||
|
DECLARE
|
||||||
|
CURSOR c_student IS
|
||||||
|
SELECT student_id, first_name, last_name, (SELECT COUNT(*) FROM enrollment e WHERE e.student_id = s.student_id) AS class_count
|
||||||
|
FROM student s
|
||||||
|
WHERE student_id < 110;
|
||||||
|
vr_student c_student%ROWTYPE;
|
||||||
|
BEGIN
|
||||||
|
OPEN c_student;
|
||||||
|
LOOP
|
||||||
|
FETCH c_student INTO vr_student;
|
||||||
|
EXIT WHEN c_student%NOTFOUND;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Student INFO: ID ' || vr_student.student_id || ' is ' || vr_student.first_name || ' ' || vr_student.last_name || ' is enrolled in ' || vr_student.class_count || ' classes.');
|
||||||
|
END LOOP;
|
||||||
|
CLOSE c_student;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Aufgabe 6.6
|
||||||
|
DECLARE
|
||||||
|
CURSOR c_group_discount IS
|
||||||
|
SELECT co.course_no, co.cost
|
||||||
|
FROM course co
|
||||||
|
WHERE (SELECT COUNT(*) FROM enrollment e
|
||||||
|
JOIN section s ON e.section_id = s.section_id
|
||||||
|
WHERE s.course_no = co.course_no) >= 8;
|
||||||
|
BEGIN
|
||||||
|
FOR r_group_discount IN c_group_discount LOOP
|
||||||
|
UPDATE course
|
||||||
|
SET cost = cost * 0.95
|
||||||
|
WHERE course_no = r_group_discount.course_no;
|
||||||
|
END LOOP;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
SELECT 'Course No: ' || course_no || ', Cost: ' || cost FROM Course;
|
||||||
386
Uebungszettel_7.sql
Normal file
386
Uebungszettel_7.sql
Normal file
@@ -0,0 +1,386 @@
|
|||||||
|
-- Aufgabe 7.1
|
||||||
|
DECLARE
|
||||||
|
v_num NUMBER := &sv_num;
|
||||||
|
BEGIN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Square root of '||v_num||
|
||||||
|
' is '||SQRT(v_num));
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN VALUE_ERROR THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('An error has occurred');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
--a) Was wird ausgegeben, wenn das Skript einmal mit 4 und -4 ausgeführt wird
|
||||||
|
-- 4: Square root of 4 is 2
|
||||||
|
-- -4: An error has occured
|
||||||
|
|
||||||
|
--b) Wieso ist der zweite Durchlauf anders?
|
||||||
|
-- Der zweite Durchlauf ist anders, weil die Funktion SQRT keine negative Zahlen akzeptiert.
|
||||||
|
|
||||||
|
--c) Angenommen es gibt keine VALUE-ERROR Exception. Wie müsste das Skript umgebaut werden, um den Fehler zu behandeln/vermeiden?
|
||||||
|
-- Man müsste mit einem IF vorher schauen, ob die Zahl negativ ist.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- Aufgabe 7.2
|
||||||
|
DECLARE
|
||||||
|
v_exists NUMBER(1);
|
||||||
|
v_total_students NUMBER(1);
|
||||||
|
v_zip CHAR(5):= '&sv_zip';
|
||||||
|
BEGIN
|
||||||
|
SELECT count(*)
|
||||||
|
INTO v_exists
|
||||||
|
FROM zipcode
|
||||||
|
WHERE zip = v_zip;
|
||||||
|
|
||||||
|
IF v_exists != 0 THEN
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO v_total_students
|
||||||
|
FROM student
|
||||||
|
WHERE zip = v_zip;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('There are '||v_total_students||' students');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE (v_zip||' is not a valid zip');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN VALUE_ERROR OR INVALID_NUMBER THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('An error has occurred');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
--a) Was wird ausgegeben, wenn das Skript für 07024, 00914 und 12345 aufgerufen wird.
|
||||||
|
-- 07024: There are 1 students
|
||||||
|
-- 00914: 00914 is not a valid zip
|
||||||
|
-- 12345: 12345 is not a valid zip
|
||||||
|
|
||||||
|
--b) Wieso wurde keine Exception geworfen?
|
||||||
|
-- Da wir vorher im IF geschaut haben, ob die Zahl existiert und wir auch das richtige Format eingegeben haben.
|
||||||
|
|
||||||
|
--c) Füge folgenden Studenten hinzu
|
||||||
|
INSERT INTO student (student_id, salutation, first_name,
|
||||||
|
last_name, zip, registration_date, created_by, created_date,
|
||||||
|
modified_by, modified_date)
|
||||||
|
VALUES (STUDENT_ID_SEQ.NEXTVAL, 'Mr.', 'John', 'Smith', '07024',
|
||||||
|
SYSDATE, 'STUDENT', SYSDATE, 'STUDENT', SYSDATE); COMMIT;
|
||||||
|
|
||||||
|
--d) Führe nach dem Hinzufügen aus Schritt c. das Skript mit 07024 aus. Wieso ändert sich jetzt das Ergebnis?
|
||||||
|
-- Error, weil Exists nur eine Stelle hat und der eingefügt Student der 10. existierende Schüler wäre.
|
||||||
|
|
||||||
|
--e)Ändere das Skript so, dass nun Vor- und Nachname des ersten Studenten für die angegeben
|
||||||
|
--PLZ anstelle der Gesamtanzahl ausgegeben wird. (vgl. rownum) — Achte dabei auf korrektes
|
||||||
|
--Error-Handling!
|
||||||
|
|
||||||
|
DECLARE
|
||||||
|
v_exists NUMBER(1);
|
||||||
|
v_first_name VARCHAR2(50);
|
||||||
|
v_last_name VARCHAR2(50);
|
||||||
|
v_zip CHAR(5) := '&sv_zip';
|
||||||
|
BEGIN
|
||||||
|
SELECT count(*)
|
||||||
|
INTO v_exists
|
||||||
|
FROM zipcode
|
||||||
|
WHERE zip = v_zip;
|
||||||
|
|
||||||
|
IF v_exists != 0 THEN
|
||||||
|
BEGIN
|
||||||
|
SELECT first_name, last_name
|
||||||
|
INTO v_first_name, v_last_name
|
||||||
|
FROM STUDENT
|
||||||
|
WHERE zip = v_zip AND ROWNUM = 1;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('First student: ' || v_first_name || ' ' || v_last_name);
|
||||||
|
EXCEPTION
|
||||||
|
WHEN NO_DATA_FOUND THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('No students found for zip ' || v_zip);
|
||||||
|
END;
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE(v_zip || ' is not a valid zip');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN VALUE_ERROR OR INVALID_NUMBER THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('An error has occurred');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Aufgabe 7.3
|
||||||
|
DECLARE
|
||||||
|
v_student_id NUMBER(10) := '&sv_user_id';
|
||||||
|
v_first_name VARCHAR2(50);
|
||||||
|
BEGIN
|
||||||
|
SELECT first_name
|
||||||
|
INTO v_first_name
|
||||||
|
FROM STUDENT
|
||||||
|
WHERE student_id = v_student_id;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Is here: ' || v_first_name);
|
||||||
|
EXCEPTION
|
||||||
|
WHEN NO_DATA_FOUND THEN
|
||||||
|
INSERT INTO student (STUDENT_ID, salutation, first_name,
|
||||||
|
last_name, zip, registration_date, created_by, created_date,
|
||||||
|
modified_by, modified_date)
|
||||||
|
VALUES (v_student_id, 'Mr.', 'John', 'Smith', '07024',
|
||||||
|
SYSDATE, 'STUDENT', SYSDATE, 'STUDENT', SYSDATE); COMMIT;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
|
||||||
|
-- Aufgabe 7.4
|
||||||
|
DECLARE
|
||||||
|
v_instructor_id NUMBER := &sv_instructor_id;
|
||||||
|
v_sections_count NUMBER;
|
||||||
|
v_firstname VARCHAR2(50);
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*), first_name
|
||||||
|
INTO v_sections_count, v_firstname
|
||||||
|
FROM instructor
|
||||||
|
INNER JOIN SECTION USING(instructor_id)
|
||||||
|
WHERE instructor_id = v_instructor_id
|
||||||
|
GROUP BY first_name;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Sections: ' || v_sections_count);
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN NO_DATA_FOUND THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('No data found for instructor ID: ' || v_instructor_id);
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('An error has occurred');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Aufgabe 7.5
|
||||||
|
DECLARE
|
||||||
|
v_zip VARCHAR2(5) := '&sv_zip';
|
||||||
|
v_total NUMBER(1);
|
||||||
|
|
||||||
|
-- outer block
|
||||||
|
BEGIN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Check if provided zipcode is valid');
|
||||||
|
|
||||||
|
SELECT zip
|
||||||
|
INTO v_zip
|
||||||
|
FROM zipcode
|
||||||
|
WHERE zip = v_zip;
|
||||||
|
|
||||||
|
-- inner block
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
SELECT count(*)
|
||||||
|
INTO v_total
|
||||||
|
FROM student
|
||||||
|
WHERE zip = v_zip;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('There are '||v_total||' students for zipcode '||v_zip);
|
||||||
|
END;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Done...');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
--a) Was wird ausgegeben, wenn das Skript für 07024 ausgeführt wird?
|
||||||
|
-- Es soll die v_total auf NUMBER(2) oder höher geändert werden, sodass kein Error mehr kommt. Danach würde folgendes ausgegeben werden:
|
||||||
|
--Check if provided zipcode is valid
|
||||||
|
--There are 11 students for zipcode 07024
|
||||||
|
--Done...
|
||||||
|
|
||||||
|
--b) Auf Basis der Ausgabe von a. welches Exception-Handling muss hinzugefügt werden?
|
||||||
|
-- EXCEPTION
|
||||||
|
-- WHEN NO_DATA_FOUND THEN
|
||||||
|
-- DBMS_OUTPUT.PUT_LINE('No valid zipcode found: ' || v_zip);
|
||||||
|
-- WHEN OTHERS THEN
|
||||||
|
-- DBMS_OUTPUT.PUT_LINE('An error has occurred: ' || SQLERRM);
|
||||||
|
|
||||||
|
|
||||||
|
-- Aufgabe 7.6
|
||||||
|
DECLARE
|
||||||
|
v_instructor_id NUMBER := &sv_instructor_id;
|
||||||
|
v_tot_sections NUMBER;
|
||||||
|
v_name VARCHAR2(30);
|
||||||
|
e_too_many_sections EXCEPTION;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO v_tot_sections
|
||||||
|
FROM section
|
||||||
|
WHERE instructor_id = v_instructor_id;
|
||||||
|
|
||||||
|
IF v_tot_sections >= 10 THEN
|
||||||
|
RAISE e_too_many_sections;
|
||||||
|
ELSE
|
||||||
|
SELECT RTRIM(first_name)||' '||RTRIM(last_name)
|
||||||
|
INTO v_name
|
||||||
|
FROM instructor
|
||||||
|
WHERE instructor_id = v_instructor_id;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Instructor, '||v_name||', teaches '||
|
||||||
|
v_tot_sections||' sections');
|
||||||
|
END IF;
|
||||||
|
EXCEPTION
|
||||||
|
WHEN e_too_many_sections THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('This instructor teaches too much');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
--a) Was wird ausgegeben, wenn das Skript für 101 und 102 ausgeführt wird?
|
||||||
|
-- 101: This instructor teaches too much
|
||||||
|
-- 102: Instructor, John Smith, teaches 2 sections
|
||||||
|
|
||||||
|
--b) Welche Anweisung löst die User-Defined Exception aus?
|
||||||
|
-- RAISE e_too_many_sections;
|
||||||
|
|
||||||
|
--c) Ändere das Skript so, dass auch der Nachname in der Fehlermeldung ausgegeben wird.
|
||||||
|
DECLARE
|
||||||
|
v_instructor_id NUMBER := &sv_instructor_id;
|
||||||
|
v_tot_sections NUMBER;
|
||||||
|
v_name VARCHAR2(30);
|
||||||
|
e_too_many_sections EXCEPTION;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO v_tot_sections
|
||||||
|
FROM section
|
||||||
|
WHERE instructor_id = v_instructor_id;
|
||||||
|
|
||||||
|
SELECT RTRIM(first_name)||' '||RTRIM(last_name)
|
||||||
|
INTO v_name
|
||||||
|
FROM instructor
|
||||||
|
WHERE instructor_id = v_instructor_id;
|
||||||
|
|
||||||
|
IF v_tot_sections >= 10 THEN
|
||||||
|
RAISE e_too_many_sections;
|
||||||
|
ELSE
|
||||||
|
SELECT RTRIM(first_name)||' '||RTRIM(last_name)
|
||||||
|
INTO v_name
|
||||||
|
FROM instructor
|
||||||
|
WHERE instructor_id = v_instructor_id;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Instructor, '||v_name||', teaches '||
|
||||||
|
v_tot_sections||' sections');
|
||||||
|
END IF;
|
||||||
|
EXCEPTION
|
||||||
|
WHEN e_too_many_sections THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('This instructor ' || v_name || ' teaches too much');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Aufgabe 7.7
|
||||||
|
DECLARE
|
||||||
|
v_my_name VARCHAR2(15) := 'ELENA SILVESTROVA';
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('My name is '||v_my_name);
|
||||||
|
|
||||||
|
DECLARE
|
||||||
|
v_your_name VARCHAR2(15);
|
||||||
|
BEGIN
|
||||||
|
v_your_name := '&sv_your_name';
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Your name is '||v_your_name);
|
||||||
|
EXCEPTION
|
||||||
|
WHEN VALUE_ERROR THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Error in the inner block');
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('This name is too long');
|
||||||
|
END;
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN VALUE_ERROR THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Error in the outer block');
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('This name is too long');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
--a) Da der default wert für v_my_name zu lang ist, wird eine string buffer exception geworfen
|
||||||
|
--b) Nein es wird der Rest nicht ausgeführt
|
||||||
|
--c)
|
||||||
|
DECLARE
|
||||||
|
BEGIN
|
||||||
|
DECLARE
|
||||||
|
v_my_name VARCHAR2(15) := 'ELENA SILVESTROVA';
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('My name is '||v_my_name);
|
||||||
|
|
||||||
|
DECLARE
|
||||||
|
v_your_name VARCHAR2(15);
|
||||||
|
BEGIN
|
||||||
|
v_your_name := '&sv_your_name';
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Your name is '||v_your_name);
|
||||||
|
EXCEPTION
|
||||||
|
WHEN VALUE_ERROR THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Error in the inner block');
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('This name is too long');
|
||||||
|
END;
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN VALUE_ERROR THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Error in the outer block');
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('This name is too long');
|
||||||
|
END;
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN others THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Error in the outer block');
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('This name is too long');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Aufgabe 7.8)
|
||||||
|
DECLARE
|
||||||
|
v_section_id NUMBER := &sv_section_id;
|
||||||
|
v_total_students NUMBER;
|
||||||
|
e_too_many_students EXCEPTION;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO v_total_students
|
||||||
|
FROM enrollment
|
||||||
|
WHERE section_id = v_section_id;
|
||||||
|
|
||||||
|
IF v_total_students >= 10 THEN
|
||||||
|
RAISE e_too_many_students;
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Number of students: ' || v_total_students);
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN e_too_many_students THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Too many students in section ' || v_section_id);
|
||||||
|
WHEN OTHERS THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('An error has occurred.');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- Aufgabe 7.9)
|
||||||
|
DECLARE
|
||||||
|
BEGIN
|
||||||
|
DECLARE
|
||||||
|
v_my_name VARCHAR2(15) := 'ELENA SILVESTROVA';
|
||||||
|
BEGIN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('My name is '||v_my_name);
|
||||||
|
|
||||||
|
DECLARE
|
||||||
|
v_your_name VARCHAR2(15);
|
||||||
|
BEGIN
|
||||||
|
v_your_name := '&sv_your_name';
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Your name is '||v_your_name);
|
||||||
|
EXCEPTION
|
||||||
|
WHEN VALUE_ERROR THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Error in the inner block');
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('This name is too long');
|
||||||
|
RAISE; -- Reraise the exception to be handled by the outer block
|
||||||
|
END;
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN VALUE_ERROR THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Error in the outer inner block');
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('This name is too long');
|
||||||
|
RAISE;
|
||||||
|
END;
|
||||||
|
|
||||||
|
EXCEPTION
|
||||||
|
WHEN VALUE_ERROR THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('Error in the outer outer block');
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('This name is too long');
|
||||||
|
END;
|
||||||
161
Uebungszettel_9.sql
Normal file
161
Uebungszettel_9.sql
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
--Aufgabe 1
|
||||||
|
--es wird ein Error geschmissen weil das Extend für das Varray fehlt
|
||||||
|
|
||||||
|
--Aufgabe 2
|
||||||
|
|
||||||
|
DECLARE
|
||||||
|
CURSOR city_cur IS
|
||||||
|
SELECT city
|
||||||
|
FROM zipcode
|
||||||
|
WHERE rownum <= 10;
|
||||||
|
|
||||||
|
TYPE city_type IS VARRAY(10) OF zipcode.city%TYPE;
|
||||||
|
|
||||||
|
city_varray city_type := city_type();
|
||||||
|
v_counter INTEGER := 0;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
FOR city_rec IN city_cur LOOP
|
||||||
|
city_varray.Extend;
|
||||||
|
v_counter := v_counter + 1;
|
||||||
|
city_varray(v_counter) := city_rec.city;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('city_varray('||v_counter||'): '||
|
||||||
|
city_varray(v_counter));
|
||||||
|
END LOOP;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
--Aufgabe 3
|
||||||
|
|
||||||
|
DECLARE
|
||||||
|
CURSOR city_cur IS
|
||||||
|
SELECT city
|
||||||
|
FROM zipcode
|
||||||
|
WHERE rownum <= 10;
|
||||||
|
|
||||||
|
TYPE city_type IS VARRAY(20) OF zipcode.city%TYPE;
|
||||||
|
|
||||||
|
city_varray city_type := city_type();
|
||||||
|
v_counter INTEGER := 0;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
FOR city_rec IN city_cur LOOP
|
||||||
|
city_varray.Extend;
|
||||||
|
v_counter := v_counter + 1;
|
||||||
|
city_varray(v_counter) := city_rec.city;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('city_varray('||v_counter||'): '||city_varray(v_counter));
|
||||||
|
END LOOP;
|
||||||
|
FOR i IN 1..10 LOOP
|
||||||
|
city_varray.EXTEND;
|
||||||
|
city_varray(10 + i) := city_varray(i);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('city_varray('||(10 + i)||'): '||city_varray(10 + i));
|
||||||
|
END LOOP;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
|
||||||
|
--Aufgabe 4
|
||||||
|
DECLARE
|
||||||
|
TYPE table_type1 IS TABLE OF INTEGER
|
||||||
|
INDEX BY BINARY_INTEGER;
|
||||||
|
|
||||||
|
TYPE table_type2 IS TABLE OF TABLE_TYPE1
|
||||||
|
INDEX BY BINARY_INTEGER;
|
||||||
|
|
||||||
|
table_tab1 table_type1;
|
||||||
|
table_tab2 table_type2;
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
FOR i IN 1..2 LOOP
|
||||||
|
FOR j IN 1..3 LOOP
|
||||||
|
IF i = 1 THEN
|
||||||
|
table_tab1(j) := j;
|
||||||
|
ELSE
|
||||||
|
table_tab1(j) := 4 - j;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
table_tab2(i)(j) := table_tab1(j);
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('table_tab2('||i||')('||j||'): '||
|
||||||
|
table_tab2(i)(j));
|
||||||
|
END LOOP;
|
||||||
|
END LOOP;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
--Es werden in die Zahlen ein bis drei und dann drei bis eins ausgegeben.
|
||||||
|
|
||||||
|
--Aufgabe 5
|
||||||
|
DECLARE
|
||||||
|
TYPE table_type1 IS TABLE OF INTEGER --associative array
|
||||||
|
INDEX BY BINARY_INTEGER;
|
||||||
|
|
||||||
|
TYPE table_type2 IS TABLE OF TABLE_TYPE1; --nested Table
|
||||||
|
|
||||||
|
table_tab1 table_type1;
|
||||||
|
table_tab2 table_type2 := table_type2();
|
||||||
|
|
||||||
|
counter Number(4) := 1;
|
||||||
|
BEGIN
|
||||||
|
FOR i IN 1..2 LOOP
|
||||||
|
FOR j IN 1..3 LOOP
|
||||||
|
IF i = 1 THEN
|
||||||
|
table_tab1(j) := j;
|
||||||
|
ELSE
|
||||||
|
table_tab1(j) := 4 - j;
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
table_tab2.extend;
|
||||||
|
table_tab2(i)(j) := table_tab1(j);
|
||||||
|
DBMS_OUTPUT.PUT_LINE ('table_tab2('||i||')('||j||'): '||
|
||||||
|
table_tab2(i)(j));
|
||||||
|
|
||||||
|
END LOOP;
|
||||||
|
END LOOP;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
--Aufgabe 6
|
||||||
|
DECLARE
|
||||||
|
TYPE varray_type IS VARRAY(3) OF INTEGER;
|
||||||
|
|
||||||
|
TYPE nested_table_type IS TABLE OF varray_type;
|
||||||
|
|
||||||
|
nested_table nested_table_type := nested_table_type();
|
||||||
|
|
||||||
|
BEGIN
|
||||||
|
FOR i IN 1..2 LOOP
|
||||||
|
nested_table.EXTEND;
|
||||||
|
nested_table(i) := varray_type();
|
||||||
|
|
||||||
|
FOR j IN 1..3 LOOP
|
||||||
|
IF i = 1 THEN
|
||||||
|
nested_table(i).EXTEND;
|
||||||
|
nested_table(i)(j) := j;
|
||||||
|
ELSE
|
||||||
|
nested_table(i).EXTEND;
|
||||||
|
nested_table(i)(j) := 4 - j;
|
||||||
|
END IF;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('nested_table(' || i || ')(' || j || '): ' || nested_table(i)(j));
|
||||||
|
END LOOP;
|
||||||
|
END LOOP;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
--Aufgabe 7
|
||||||
|
DECLARE
|
||||||
|
CURSOR c_instructor IS SELECT FIRST_NAME, LAST_NAME, SALUTATION FROM INSTRUCTOR;
|
||||||
|
|
||||||
|
TYPE type_instructor IS TABLE OF VARCHAR2(100)
|
||||||
|
INDEX BY BINARY_INTEGER;
|
||||||
|
|
||||||
|
instructor_varray type_instructor;
|
||||||
|
|
||||||
|
counter Number(10) := 0;
|
||||||
|
BEGIN
|
||||||
|
FOR rec_instructor IN c_instructor LOOP
|
||||||
|
counter := counter + 1;
|
||||||
|
instructor_varray(counter) := 'name(' || counter || '): ' || rec_instructor.SALUTATION || ' ' || rec_instructor.FIRST_NAME || ' ' || rec_instructor.LAST_NAME;
|
||||||
|
DBMS_OUTPUT.PUT_LINE(instructor_varray(counter));
|
||||||
|
END LOOP;
|
||||||
|
END;
|
||||||
|
/
|
||||||
120
studenttables/01_create_student_tables.sql
Normal file
120
studenttables/01_create_student_tables.sql
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
CREATE TABLE INSTRUCTOR
|
||||||
|
(INSTRUCTOR_ID NUMBER(8,0)
|
||||||
|
,SALUTATION VARCHAR2(5)
|
||||||
|
,FIRST_NAME VARCHAR2(25)
|
||||||
|
,LAST_NAME VARCHAR2(25)
|
||||||
|
,STREET_ADDRESS VARCHAR2(50)
|
||||||
|
,ZIP VARCHAR2(5)
|
||||||
|
,PHONE VARCHAR2(15)
|
||||||
|
,CREATED_BY VARCHAR2(30)
|
||||||
|
,CREATED_DATE DATE
|
||||||
|
,MODIFIED_BY VARCHAR2(30)
|
||||||
|
,MODIFIED_DATE DATE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE GRADE
|
||||||
|
(STUDENT_ID NUMBER(8,0)
|
||||||
|
,SECTION_ID NUMBER(8,0)
|
||||||
|
,GRADE_TYPE_CODE CHAR(2)
|
||||||
|
,GRADE_CODE_OCCURRENCE NUMBER(38,0)
|
||||||
|
,NUMERIC_GRADE NUMBER(3,0) DEFAULT 0
|
||||||
|
,COMMENTS VARCHAR2(2000)
|
||||||
|
,CREATED_BY VARCHAR2(30)
|
||||||
|
,CREATED_DATE DATE
|
||||||
|
,MODIFIED_BY VARCHAR2(30)
|
||||||
|
,MODIFIED_DATE DATE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE GRADE_TYPE
|
||||||
|
(GRADE_TYPE_CODE CHAR(2)
|
||||||
|
,DESCRIPTION VARCHAR2(50)
|
||||||
|
,CREATED_BY VARCHAR2(30)
|
||||||
|
,CREATED_DATE DATE
|
||||||
|
,MODIFIED_BY VARCHAR2(30)
|
||||||
|
,MODIFIED_DATE DATE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE GRADE_CONVERSION
|
||||||
|
(LETTER_GRADE VARCHAR2(2)
|
||||||
|
,GRADE_POINT NUMBER(3,2) DEFAULT 0
|
||||||
|
,MAX_GRADE NUMBER(3,0)
|
||||||
|
,MIN_GRADE NUMBER(3,0)
|
||||||
|
,CREATED_BY VARCHAR2(30)
|
||||||
|
,CREATED_DATE DATE
|
||||||
|
,MODIFIED_BY VARCHAR2(30)
|
||||||
|
,MODIFIED_DATE DATE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE GRADE_TYPE_WEIGHT
|
||||||
|
(SECTION_ID NUMBER(8,0)
|
||||||
|
,GRADE_TYPE_CODE CHAR(2)
|
||||||
|
,NUMBER_PER_SECTION NUMBER(3,0)
|
||||||
|
,PERCENT_OF_FINAL_GRADE NUMBER(3,0)
|
||||||
|
,DROP_LOWEST CHAR(1)
|
||||||
|
,CREATED_BY VARCHAR2(30)
|
||||||
|
,CREATED_DATE DATE
|
||||||
|
,MODIFIED_BY VARCHAR2(30)
|
||||||
|
,MODIFIED_DATE DATE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE SECTION
|
||||||
|
(SECTION_ID NUMBER(8,0)
|
||||||
|
,COURSE_NO NUMBER(8,0)
|
||||||
|
,SECTION_NO NUMBER(3,0)
|
||||||
|
,START_DATE_TIME DATE
|
||||||
|
,LOCATION VARCHAR2(50)
|
||||||
|
,INSTRUCTOR_ID NUMBER(8,0)
|
||||||
|
,CAPACITY NUMBER(3,0)
|
||||||
|
,CREATED_BY VARCHAR2(30)
|
||||||
|
,CREATED_DATE DATE
|
||||||
|
,MODIFIED_BY VARCHAR2(30)
|
||||||
|
,MODIFIED_DATE DATE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE COURSE
|
||||||
|
(COURSE_NO NUMBER(8,0)
|
||||||
|
,DESCRIPTION VARCHAR2(50)
|
||||||
|
,COST NUMBER(9,2)
|
||||||
|
,PREREQUISITE NUMBER(8,0)
|
||||||
|
,CREATED_BY VARCHAR2(30)
|
||||||
|
,CREATED_DATE DATE
|
||||||
|
,MODIFIED_BY VARCHAR2(30)
|
||||||
|
,MODIFIED_DATE DATE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE ENROLLMENT
|
||||||
|
(STUDENT_ID NUMBER(8,0)
|
||||||
|
,SECTION_ID NUMBER(8,0)
|
||||||
|
,ENROLL_DATE DATE
|
||||||
|
,FINAL_GRADE NUMBER(3,0)
|
||||||
|
,CREATED_BY VARCHAR2(30)
|
||||||
|
,CREATED_DATE DATE
|
||||||
|
,MODIFIED_BY VARCHAR2(30)
|
||||||
|
,MODIFIED_DATE DATE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE STUDENT
|
||||||
|
(STUDENT_ID NUMBER(8,0)
|
||||||
|
,SALUTATION VARCHAR2(5)
|
||||||
|
,FIRST_NAME VARCHAR2(25)
|
||||||
|
,LAST_NAME VARCHAR2(25)
|
||||||
|
,STREET_ADDRESS VARCHAR2(50)
|
||||||
|
,ZIP VARCHAR2(5)
|
||||||
|
,PHONE VARCHAR2(15)
|
||||||
|
,EMPLOYER VARCHAR2(50)
|
||||||
|
,REGISTRATION_DATE DATE
|
||||||
|
,CREATED_BY VARCHAR2(30)
|
||||||
|
,CREATED_DATE DATE
|
||||||
|
,MODIFIED_BY VARCHAR2(30)
|
||||||
|
,MODIFIED_DATE DATE
|
||||||
|
);
|
||||||
|
|
||||||
|
CREATE TABLE ZIPCODE
|
||||||
|
(ZIP VARCHAR2(5)
|
||||||
|
,CITY VARCHAR2(25)
|
||||||
|
,STATE VARCHAR2(2)
|
||||||
|
,CREATED_BY VARCHAR2(30)
|
||||||
|
,CREATED_DATE DATE
|
||||||
|
,MODIFIED_BY VARCHAR2(30)
|
||||||
|
,MODIFIED_DATE DATE
|
||||||
|
);
|
||||||
24
studenttables/02_create_student_indices.sql
Normal file
24
studenttables/02_create_student_indices.sql
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
CREATE INDEX INST_ZIP_FK_I ON INSTRUCTOR
|
||||||
|
(ZIP);
|
||||||
|
|
||||||
|
CREATE INDEX GR_GRTW_FK_I ON GRADE
|
||||||
|
(SECTION_ID
|
||||||
|
,GRADE_TYPE_CODE);
|
||||||
|
|
||||||
|
CREATE INDEX GRTW_GRTYP_FK_I ON GRADE_TYPE_WEIGHT
|
||||||
|
(GRADE_TYPE_CODE);
|
||||||
|
|
||||||
|
CREATE INDEX SECT_CRSE_FK_I ON SECTION
|
||||||
|
(COURSE_NO);
|
||||||
|
|
||||||
|
CREATE INDEX SECT_INST_FK_I ON SECTION
|
||||||
|
(INSTRUCTOR_ID);
|
||||||
|
|
||||||
|
CREATE INDEX CRSE_CRSE_FK_I ON COURSE
|
||||||
|
(PREREQUISITE);
|
||||||
|
|
||||||
|
CREATE INDEX ENR_SECT_FK_I ON ENROLLMENT
|
||||||
|
(SECTION_ID);
|
||||||
|
|
||||||
|
CREATE INDEX STU_ZIP_FK_I ON STUDENT
|
||||||
|
(ZIP);
|
||||||
3200
studenttables/03_insert_student_tables.sql
Normal file
3200
studenttables/03_insert_student_tables.sql
Normal file
File diff suppressed because it is too large
Load Diff
101
studenttables/04_create_student_constraints.sql
Normal file
101
studenttables/04_create_student_constraints.sql
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
ALTER TABLE INSTRUCTOR
|
||||||
|
MODIFY(MODIFIED_BY CONSTRAINT INST_MODFIED_BY_NNULL NOT NULL)
|
||||||
|
MODIFY(INSTRUCTOR_ID CONSTRAINT INST_INSTRUCTOR_ID_NNULL NOT NULL)
|
||||||
|
MODIFY(CREATED_BY CONSTRAINT INST_CREATED_BY_NNULL NOT NULL)
|
||||||
|
MODIFY(CREATED_DATE CONSTRAINT INST_CREATED_DATE_NNULL NOT NULL)
|
||||||
|
MODIFY(MODIFIED_DATE CONSTRAINT INST_MODIFIED_DATE_NNULL NOT NULL)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE GRADE
|
||||||
|
MODIFY(CREATED_DATE CONSTRAINT GR_CREATED_DATE_NNULL NOT NULL)
|
||||||
|
MODIFY(STUDENT_ID CONSTRAINT GR_STUDENT_ID_NNULL NOT NULL)
|
||||||
|
MODIFY(SECTION_ID CONSTRAINT GR_SECTION_ID_NNULL NOT NULL)
|
||||||
|
MODIFY(GRADE_TYPE_CODE CONSTRAINT GR_GRADE_TYPE_CODE_NNULL NOT NULL)
|
||||||
|
MODIFY(MODIFIED_DATE CONSTRAINT GR_MODIFIED_DATE_NNULL NOT NULL)
|
||||||
|
MODIFY(CREATED_BY CONSTRAINT GR_CREATED_BY_NNULL NOT NULL)
|
||||||
|
MODIFY(GRADE_CODE_OCCURRENCE CONSTRAINT GR_GRADE_CODE_OCCURRENCE_NNULL NOT NULL)
|
||||||
|
MODIFY(MODIFIED_BY CONSTRAINT GR_MODIFIED_BY_NNULL NOT NULL)
|
||||||
|
MODIFY(NUMERIC_GRADE CONSTRAINT GR_NUMERIC_GRADE_NNULL NOT NULL)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE GRADE_TYPE
|
||||||
|
MODIFY(DESCRIPTION CONSTRAINT GRTYP_DESCRIPTION_NNULL NOT NULL)
|
||||||
|
MODIFY(MODIFIED_BY CONSTRAINT GRTYP_MODIFIED_BY_NNULL NOT NULL)
|
||||||
|
MODIFY(CREATED_BY CONSTRAINT GRTYP_CREATED_BY_NNULL NOT NULL)
|
||||||
|
MODIFY(GRADE_TYPE_CODE CONSTRAINT GRTYP_GRADE_TYPE_CODE_NNULL NOT NULL)
|
||||||
|
MODIFY(MODIFIED_DATE CONSTRAINT GRTYP_MODIFIED_DATE_NNULL NOT NULL)
|
||||||
|
MODIFY(CREATED_DATE CONSTRAINT GRTYP_CREATED_DATE_NNULL NOT NULL)
|
||||||
|
ADD CONSTRAINT GRTYP_GRADE_TYPE_CODE_LENGTH CHECK (LENGTH(grade_type_code)=2)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE GRADE_CONVERSION
|
||||||
|
MODIFY(MAX_GRADE CONSTRAINT GRCON_MAX_GRADE_NNULL NOT NULL)
|
||||||
|
MODIFY(MODIFIED_DATE CONSTRAINT GRCON_MODIFIED_DATE_NNULL NOT NULL)
|
||||||
|
MODIFY(CREATED_DATE CONSTRAINT GRCON_CREATED_DATE_NNULL NOT NULL)
|
||||||
|
MODIFY(GRADE_POINT CONSTRAINT GRCON_GRADE_POINT_NNULL NOT NULL)
|
||||||
|
MODIFY(MODIFIED_BY CONSTRAINT GRCON_MODIFIED_BY_NNULL NOT NULL)
|
||||||
|
MODIFY(LETTER_GRADE CONSTRAINT GRCON_LETTER_GRADE_NNULL NOT NULL)
|
||||||
|
MODIFY(MIN_GRADE CONSTRAINT GRCON_MIN_GRADE_NNULL NOT NULL)
|
||||||
|
MODIFY(CREATED_BY CONSTRAINT GRCON_CREATED_BY_NNULL NOT NULL)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE GRADE_TYPE_WEIGHT
|
||||||
|
MODIFY(NUMBER_PER_SECTION CONSTRAINT GRTW_NUMBER_PER_SECTION_NNULL NOT NULL)
|
||||||
|
MODIFY(CREATED_DATE CONSTRAINT GRTW_CREATED_DATE_NNULL NOT NULL)
|
||||||
|
MODIFY(PERCENT_OF_FINAL_GRADE CONSTRAINT GRTW_PCT_OF_FINAL_GRADE_NNULL NOT NULL)
|
||||||
|
MODIFY(GRADE_TYPE_CODE CONSTRAINT GRTW_GRADE_TYPE_CODE_NNULL NOT NULL)
|
||||||
|
MODIFY(SECTION_ID CONSTRAINT GRTW_SECTION_ID_NNULL NOT NULL)
|
||||||
|
MODIFY(MODIFIED_BY CONSTRAINT GRTW_MODIFIED_BY_NNULL NOT NULL)
|
||||||
|
MODIFY(CREATED_BY CONSTRAINT GRTW_CREATED_BY_NNULL NOT NULL)
|
||||||
|
MODIFY(DROP_LOWEST CONSTRAINT GRTW_DROP_LOWEST_NNULL NOT NULL)
|
||||||
|
MODIFY(MODIFIED_DATE CONSTRAINT GRTW_MODIFIED_DATE_NNULL NOT NULL)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE SECTION
|
||||||
|
MODIFY(CREATED_DATE CONSTRAINT SECT_CREATED_DATE_NNULL NOT NULL)
|
||||||
|
MODIFY(MODIFIED_BY CONSTRAINT SECT_MODIFIED_BY_NNULL NOT NULL)
|
||||||
|
MODIFY(SECTION_ID CONSTRAINT SECT_SECTION_ID_NNULL NOT NULL)
|
||||||
|
MODIFY(SECTION_NO CONSTRAINT SECT_SECTION_NO_NNULL NOT NULL)
|
||||||
|
MODIFY(CREATED_BY CONSTRAINT SECT_CREATED_BY_NNULL NOT NULL)
|
||||||
|
MODIFY(INSTRUCTOR_ID CONSTRAINT SECT_INSTRUCTOR_ID_NNULL NOT NULL)
|
||||||
|
MODIFY(MODIFIED_DATE CONSTRAINT SECT_MODIFIED_DATE_NNULL NOT NULL)
|
||||||
|
MODIFY(COURSE_NO CONSTRAINT SECT_COURSE_NO_NNULL NOT NULL)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE COURSE
|
||||||
|
MODIFY(CREATED_DATE CONSTRAINT CRSE_CREATED_DATE_NNULL NOT NULL)
|
||||||
|
MODIFY(MODIFIED_BY CONSTRAINT CRSE_MODIFIED_BY_NNULL NOT NULL)
|
||||||
|
MODIFY(MODIFIED_DATE CONSTRAINT CRSE_MODIFIED_DATE_NNULL NOT NULL)
|
||||||
|
MODIFY(DESCRIPTION CONSTRAINT CRSE_DESCRIPTION_NNULL NOT NULL)
|
||||||
|
MODIFY(COURSE_NO CONSTRAINT CRSE_COURSE_NO_NNULL NOT NULL)
|
||||||
|
MODIFY(CREATED_BY CONSTRAINT CRSE_CREATED_BY_NNULL NOT NULL)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE ENROLLMENT
|
||||||
|
MODIFY(MODIFIED_DATE CONSTRAINT ENR_MODIFIED_DATE_NNULL NOT NULL)
|
||||||
|
MODIFY(STUDENT_ID CONSTRAINT ENR_STUDENT_ID_NNULL NOT NULL)
|
||||||
|
MODIFY(ENROLL_DATE CONSTRAINT ENR_ENROLL_DATE_NNULL NOT NULL)
|
||||||
|
MODIFY(MODIFIED_BY CONSTRAINT ENR_MODIFIED_BY_NNULL NOT NULL)
|
||||||
|
MODIFY(SECTION_ID CONSTRAINT ENR_SECTION_ID_NNULL NOT NULL)
|
||||||
|
MODIFY(CREATED_BY CONSTRAINT ENR_CREATED_BY_NNULL NOT NULL)
|
||||||
|
MODIFY(CREATED_DATE CONSTRAINT ENR_CREATED_DATE_NNULL NOT NULL)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE STUDENT
|
||||||
|
MODIFY(REGISTRATION_DATE CONSTRAINT STU_REGISTRATION_DATE_NNULL NOT NULL)
|
||||||
|
MODIFY(CREATED_BY CONSTRAINT STU_CREATED_BY_NNULL NOT NULL)
|
||||||
|
MODIFY(ZIP CONSTRAINT STU_ZIP_NNULL NOT NULL)
|
||||||
|
MODIFY(LAST_NAME CONSTRAINT STU_LAST_NAME_NNULL NOT NULL)
|
||||||
|
MODIFY(MODIFIED_DATE CONSTRAINT STU_MODIFIED_DATE_NNULL NOT NULL)
|
||||||
|
MODIFY(STUDENT_ID CONSTRAINT STU_STUDENT_ID_NNULL NOT NULL)
|
||||||
|
MODIFY(MODIFIED_BY CONSTRAINT STU_MODIFIED_BY_NNULL NOT NULL)
|
||||||
|
MODIFY(CREATED_DATE CONSTRAINT STU_CREATED_DATE_NNULL NOT NULL)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE ZIPCODE
|
||||||
|
MODIFY(CREATED_BY CONSTRAINT ZIP_CREATED_BY_NNULL NOT NULL)
|
||||||
|
MODIFY(MODIFIED_DATE CONSTRAINT ZIP_MODIFIED_DATE_NNULL NOT NULL)
|
||||||
|
MODIFY(CREATED_DATE CONSTRAINT ZIP_CREATED_DATE_NNULL NOT NULL)
|
||||||
|
MODIFY(ZIP CONSTRAINT ZIP_ZIP_NNULL NOT NULL)
|
||||||
|
MODIFY(MODIFIED_BY CONSTRAINT ZIP_MODIFIED_BY_NNULL NOT NULL)
|
||||||
|
;
|
||||||
118
studenttables/05_create_student_keys.sql
Normal file
118
studenttables/05_create_student_keys.sql
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
ALTER TABLE INSTRUCTOR
|
||||||
|
ADD CONSTRAINT INST_PK PRIMARY KEY
|
||||||
|
(INSTRUCTOR_ID)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE GRADE
|
||||||
|
ADD CONSTRAINT GR_PK PRIMARY KEY
|
||||||
|
(STUDENT_ID
|
||||||
|
,SECTION_ID
|
||||||
|
,GRADE_TYPE_CODE
|
||||||
|
,GRADE_CODE_OCCURRENCE)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE GRADE_TYPE
|
||||||
|
ADD CONSTRAINT GRTYP_PK PRIMARY KEY
|
||||||
|
(GRADE_TYPE_CODE)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE GRADE_CONVERSION
|
||||||
|
ADD CONSTRAINT GRCON_PK PRIMARY KEY
|
||||||
|
(LETTER_GRADE)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE GRADE_TYPE_WEIGHT
|
||||||
|
ADD CONSTRAINT GRTW_PK PRIMARY KEY
|
||||||
|
(SECTION_ID
|
||||||
|
,GRADE_TYPE_CODE)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE SECTION
|
||||||
|
ADD CONSTRAINT SECT_PK PRIMARY KEY
|
||||||
|
(SECTION_ID)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE COURSE
|
||||||
|
ADD CONSTRAINT CRSE_PK PRIMARY KEY
|
||||||
|
(COURSE_NO)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE ENROLLMENT
|
||||||
|
ADD CONSTRAINT ENR_PK PRIMARY KEY
|
||||||
|
(STUDENT_ID
|
||||||
|
,SECTION_ID)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE STUDENT
|
||||||
|
ADD CONSTRAINT STU_PK PRIMARY KEY
|
||||||
|
(STUDENT_ID)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE ZIPCODE
|
||||||
|
ADD CONSTRAINT ZIP_PK PRIMARY KEY
|
||||||
|
(ZIP)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE SECTION
|
||||||
|
ADD ( CONSTRAINT SECT_SECT2_UK UNIQUE
|
||||||
|
(SECTION_NO
|
||||||
|
,COURSE_NO))
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE INSTRUCTOR ADD CONSTRAINT
|
||||||
|
INST_ZIP_FK FOREIGN KEY
|
||||||
|
(ZIP) REFERENCES ZIPCODE
|
||||||
|
(ZIP)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE GRADE ADD CONSTRAINT
|
||||||
|
GR_ENR_FK FOREIGN KEY
|
||||||
|
(STUDENT_ID
|
||||||
|
,SECTION_ID) REFERENCES ENROLLMENT
|
||||||
|
(STUDENT_ID
|
||||||
|
,SECTION_ID) ADD CONSTRAINT
|
||||||
|
GR_GRTW_FK FOREIGN KEY
|
||||||
|
(SECTION_ID
|
||||||
|
,GRADE_TYPE_CODE) REFERENCES GRADE_TYPE_WEIGHT
|
||||||
|
(SECTION_ID
|
||||||
|
,GRADE_TYPE_CODE)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE GRADE_TYPE_WEIGHT ADD CONSTRAINT
|
||||||
|
GRTW_GRTYP_FK FOREIGN KEY
|
||||||
|
(GRADE_TYPE_CODE) REFERENCES GRADE_TYPE
|
||||||
|
(GRADE_TYPE_CODE) ADD CONSTRAINT
|
||||||
|
GRTW_SECT_FK FOREIGN KEY
|
||||||
|
(SECTION_ID) REFERENCES SECTION
|
||||||
|
(SECTION_ID)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE SECTION ADD CONSTRAINT
|
||||||
|
SECT_INST_FK FOREIGN KEY
|
||||||
|
(INSTRUCTOR_ID) REFERENCES INSTRUCTOR
|
||||||
|
(INSTRUCTOR_ID) ADD CONSTRAINT
|
||||||
|
SECT_CRSE_FK FOREIGN KEY
|
||||||
|
(COURSE_NO) REFERENCES COURSE
|
||||||
|
(COURSE_NO)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE COURSE ADD CONSTRAINT
|
||||||
|
CRSE_CRSE_FK FOREIGN KEY
|
||||||
|
(PREREQUISITE) REFERENCES COURSE
|
||||||
|
(COURSE_NO)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE ENROLLMENT ADD CONSTRAINT
|
||||||
|
ENR_STU_FK FOREIGN KEY
|
||||||
|
(STUDENT_ID) REFERENCES STUDENT
|
||||||
|
(STUDENT_ID) ADD CONSTRAINT
|
||||||
|
ENR_SECT_FK FOREIGN KEY
|
||||||
|
(SECTION_ID) REFERENCES SECTION
|
||||||
|
(SECTION_ID)
|
||||||
|
;
|
||||||
|
|
||||||
|
ALTER TABLE STUDENT ADD CONSTRAINT
|
||||||
|
STU_ZIP_FK FOREIGN KEY
|
||||||
|
(ZIP) REFERENCES ZIPCODE
|
||||||
|
(ZIP)
|
||||||
|
;
|
||||||
35
studenttables/06_create_student_sequences.sql
Normal file
35
studenttables/06_create_student_sequences.sql
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
CREATE SEQUENCE INSTRUCTOR_ID_SEQ
|
||||||
|
INCREMENT BY 1
|
||||||
|
START WITH 112
|
||||||
|
NOMAXVALUE
|
||||||
|
MINVALUE 1
|
||||||
|
NOCYCLE
|
||||||
|
NOCACHE
|
||||||
|
;
|
||||||
|
|
||||||
|
CREATE SEQUENCE SECTION_ID_SEQ
|
||||||
|
INCREMENT BY 1
|
||||||
|
START WITH 158
|
||||||
|
NOMAXVALUE
|
||||||
|
MINVALUE 1
|
||||||
|
NOCYCLE
|
||||||
|
NOCACHE
|
||||||
|
;
|
||||||
|
|
||||||
|
CREATE SEQUENCE STUDENT_ID_SEQ
|
||||||
|
INCREMENT BY 1
|
||||||
|
START WITH 401
|
||||||
|
NOMAXVALUE
|
||||||
|
MINVALUE 1
|
||||||
|
NOCYCLE
|
||||||
|
NOCACHE
|
||||||
|
;
|
||||||
|
|
||||||
|
CREATE SEQUENCE COURSE_NO_SEQ
|
||||||
|
INCREMENT BY 1
|
||||||
|
START WITH 452
|
||||||
|
NOMAXVALUE
|
||||||
|
MINVALUE 1
|
||||||
|
NOCYCLE
|
||||||
|
NOCACHE
|
||||||
|
;
|
||||||
15
studenttables/07_drop_student_tables.sql
Normal file
15
studenttables/07_drop_student_tables.sql
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
DROP TABLE COURSE CASCADE CONSTRAINTS;
|
||||||
|
DROP TABLE ENROLLMENT CASCADE CONSTRAINTS;
|
||||||
|
DROP TABLE GRADE CASCADE CONSTRAINTS;
|
||||||
|
DROP TABLE GRADE_CONVERSION CASCADE CONSTRAINTS;
|
||||||
|
DROP TABLE GRADE_TYPE CASCADE CONSTRAINTS;
|
||||||
|
DROP TABLE GRADE_TYPE_WEIGHT CASCADE CONSTRAINTS;
|
||||||
|
DROP TABLE INSTRUCTOR CASCADE CONSTRAINTS;
|
||||||
|
DROP TABLE SECTION CASCADE CONSTRAINTS;
|
||||||
|
DROP TABLE STUDENT CASCADE CONSTRAINTS;
|
||||||
|
DROP TABLE ZIPCODE CASCADE CONSTRAINTS;
|
||||||
|
|
||||||
|
DROP SEQUENCE COURSE_NO_SEQ;
|
||||||
|
DROP SEQUENCE INSTRUCTOR_ID_SEQ;
|
||||||
|
DROP SEQUENCE SECTION_ID_SEQ;
|
||||||
|
DROP SEQUENCE STUDENT_ID_SEQ;
|
||||||
30
studenttables/08_check_student_db.sql
Normal file
30
studenttables/08_check_student_db.sql
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
SELECT 'Count of COURSE Table:', COUNT(*)
|
||||||
|
FROM course
|
||||||
|
GROUP BY 'Count of COURSE Table:';
|
||||||
|
SELECT 'Count of ENROLLMENT Table:', COUNT(*)
|
||||||
|
FROM enrollment
|
||||||
|
GROUP BY 'Count of ENROLLMENT Table:';
|
||||||
|
SELECT 'Count of GRADE Table:', COUNT(*)
|
||||||
|
FROM GRADE
|
||||||
|
GROUP BY 'Count of GRADE Table:';
|
||||||
|
SELECT 'Count of GRADE_CONVERSION Table:', COUNT(*)
|
||||||
|
FROM GRADE_CONVERSION
|
||||||
|
GROUP BY 'Count of GRADE_CONVERSION Table:';
|
||||||
|
SELECT 'Count of GRADE_TYPE Table:', COUNT(*)
|
||||||
|
FROM GRADE_TYPE
|
||||||
|
GROUP BY 'Count of GRADE_TYPE Table:';
|
||||||
|
SELECT 'Count of GRADE_TYPE_WEIGHT Table:', COUNT(*)
|
||||||
|
FROM GRADE_TYPE_WEIGHT
|
||||||
|
GROUP BY 'Count of GRADE_TYPE Table:';
|
||||||
|
SELECT 'Count of INSTRUCTOR Table:', COUNT(*)
|
||||||
|
FROM INSTRUCTOR
|
||||||
|
GROUP BY 'Count of INSTRUCTOR Table:';
|
||||||
|
SELECT 'Count of SECTION Table:', COUNT(*)
|
||||||
|
FROM SECTION
|
||||||
|
GROUP BY 'Count of SECTION Table:';
|
||||||
|
SELECT 'Count of STUDENT Table:', COUNT(*)
|
||||||
|
FROM STUDENT
|
||||||
|
GROUP BY 'Count of STUDENT Table:';
|
||||||
|
SELECT 'Count of ZIPCODE Table:', COUNT(*)
|
||||||
|
FROM ZIPCODE
|
||||||
|
GROUP BY 'Count of ZIPCODE Table:';
|
||||||
@@ -173,7 +173,7 @@ BEGIN
|
|||||||
-- Query to count the number of sections taught by the instructor
|
-- Query to count the number of sections taught by the instructor
|
||||||
SELECT COUNT(*)
|
SELECT COUNT(*)
|
||||||
INTO v_section_count
|
INTO v_section_count
|
||||||
FROM sections
|
FROM section
|
||||||
WHERE instructor_id = v_instructor_id;
|
WHERE instructor_id = v_instructor_id;
|
||||||
|
|
||||||
-- Check if the number of sections is greater than 3
|
-- Check if the number of sections is greater than 3
|
||||||
@@ -245,7 +245,7 @@ BEGIN
|
|||||||
-- Query to count the number of sections taught by the instructor
|
-- Query to count the number of sections taught by the instructor
|
||||||
SELECT COUNT(*)
|
SELECT COUNT(*)
|
||||||
INTO v_section_count
|
INTO v_section_count
|
||||||
FROM sections
|
FROM section
|
||||||
WHERE instructor_id = v_instructor_id;
|
WHERE instructor_id = v_instructor_id;
|
||||||
|
|
||||||
-- Use a CASE statement to determine the output message
|
-- Use a CASE statement to determine the output message
|
||||||
|
|||||||
Reference in New Issue
Block a user