add UEZ4
This commit is contained in:
259
uebungszettel_4.sql
Normal file
259
uebungszettel_4.sql
Normal file
@@ -0,0 +1,259 @@
|
|||||||
|
--4.1)
|
||||||
|
--a)
|
||||||
|
CREATE TABLE UEBUNG4 (
|
||||||
|
ID NUMBER,
|
||||||
|
NAME VARCHAR2(20)
|
||||||
|
);
|
||||||
|
--b)
|
||||||
|
CREATE SEQUENCE UEBUNG4_SEQ
|
||||||
|
START WITH 1
|
||||||
|
INCREMENT BY 5;
|
||||||
|
--c)
|
||||||
|
DECLARE
|
||||||
|
v_name VARCHAR2(20);
|
||||||
|
v_id NUMBER;
|
||||||
|
BEGIN
|
||||||
|
-- Insert the student with the most enrollments
|
||||||
|
INSERT INTO UEBUNG4 (ID, NAME)
|
||||||
|
SELECT UEBUNG4_SEQ.NEXTVAL, NAME
|
||||||
|
FROM students
|
||||||
|
WHERE enrollments = (SELECT MAX(enrollments) FROM students);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Inserted student with most enrollments');
|
||||||
|
SAVEPOINT A;
|
||||||
|
|
||||||
|
-- Insert the student with the fewest enrollments
|
||||||
|
INSERT INTO UEBUNG4 (ID, NAME)
|
||||||
|
SELECT UEBUNG4_SEQ.NEXTVAL, NAME
|
||||||
|
FROM students
|
||||||
|
WHERE enrollments = (SELECT MIN(enrollments) FROM students);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Inserted student with fewest enrollments');
|
||||||
|
SAVEPOINT B;
|
||||||
|
|
||||||
|
-- Insert the instructor with the most courses
|
||||||
|
INSERT INTO UEBUNG4 (ID, NAME)
|
||||||
|
SELECT UEBUNG4_SEQ.NEXTVAL, NAME
|
||||||
|
FROM instructors
|
||||||
|
WHERE courses = (SELECT MAX(courses) FROM instructors);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Inserted instructor with most courses');
|
||||||
|
SAVEPOINT C;
|
||||||
|
|
||||||
|
-- Store the ID of the inserted instructor
|
||||||
|
SELECT ID INTO v_id
|
||||||
|
FROM UEBUNG4
|
||||||
|
WHERE NAME = (SELECT NAME FROM instructors WHERE courses = (SELECT MAX(courses) FROM instructors));
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Stored ID of instructor with most courses: ' || v_id);
|
||||||
|
|
||||||
|
-- Rollback the insertion of the instructor with the most courses
|
||||||
|
ROLLBACK TO SAVEPOINT C;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Rolled back insertion of instructor with most courses');
|
||||||
|
|
||||||
|
-- Insert the instructor with the fewest courses using v_id
|
||||||
|
INSERT INTO UEBUNG4 (ID, NAME)
|
||||||
|
SELECT v_id, NAME
|
||||||
|
FROM instructors
|
||||||
|
WHERE courses = (SELECT MIN(courses) FROM instructors);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Inserted instructor with fewest courses using stored ID');
|
||||||
|
|
||||||
|
-- Insert the instructor with the most courses using the sequence
|
||||||
|
INSERT INTO UEBUNG4 (ID, NAME)
|
||||||
|
SELECT UEBUNG4_SEQ.NEXTVAL, NAME
|
||||||
|
FROM instructors
|
||||||
|
WHERE courses = (SELECT MAX(courses) FROM instructors);
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Inserted instructor with most courses using sequence ID');
|
||||||
|
|
||||||
|
COMMIT;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
--4.2)
|
||||||
|
DECLARE
|
||||||
|
v_date DATE := TO_DATE('&sv_user_date ' , 'DD-MM-YYYY' ) ;
|
||||||
|
v_day VARCHAR2( 15 ) ;
|
||||||
|
BEGIN
|
||||||
|
v_day := RTRIM(TO_CHAR( v_date , 'DAY' ) ) ;
|
||||||
|
IF v_day IN ( 'SATURDAY' , 'SUNDAY') THEN
|
||||||
|
DBMS_OUTPUT. PUT_LINE ( v_date||' falls on weekend');
|
||||||
|
END IF;
|
||||||
|
--control resumes here
|
||||||
|
DBMS_OUTPUT. PUT_LINE ( 'Done . . . ' ) ;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
-- For 14.10.2023
|
||||||
|
DECLARE
|
||||||
|
v_date DATE := TO_DATE('14-10-2023', 'DD-MM-YYYY');
|
||||||
|
v_day VARCHAR2(15);
|
||||||
|
BEGIN
|
||||||
|
v_day := RTRIM(TO_CHAR(v_date, 'DAY'));
|
||||||
|
IF v_day IN ('SATURDAY', 'SUNDAY') THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(v_date || ' falls on weekend');
|
||||||
|
END IF;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Done...');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
-- For 16.10.2023
|
||||||
|
DECLARE
|
||||||
|
v_date DATE := TO_DATE('16-10-2023', 'DD-MM-YYYY');
|
||||||
|
v_day VARCHAR2(15);
|
||||||
|
BEGIN
|
||||||
|
v_day := RTRIM(TO_CHAR(v_date, 'DAY'));
|
||||||
|
IF v_day IN ('SATURDAY', 'SUNDAY') THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(v_date || ' falls on weekend');
|
||||||
|
END IF;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Done . . .');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
--Remove RTRIM
|
||||||
|
DECLARE
|
||||||
|
v_date DATE := TO_DATE('14-10-2023', 'DD-MM-YYYY');
|
||||||
|
v_day VARCHAR2(15);
|
||||||
|
BEGIN
|
||||||
|
v_day := TO_CHAR(v_date, 'DAY');
|
||||||
|
DBMS_OUTPUT.PUT_LINE(v_day);
|
||||||
|
IF v_day IN ('SATURDAY', 'SUNDAY') THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(v_date || ' falls on weekend');
|
||||||
|
END IF;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Done . . .');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
--Rewrite using LIKE
|
||||||
|
DECLARE
|
||||||
|
v_date DATE := TO_DATE('&sv_user_date', 'DD-MM-YYYY');
|
||||||
|
v_day VARCHAR2(15);
|
||||||
|
BEGIN
|
||||||
|
v_day := RTRIM(TO_CHAR(v_date, 'DAY'));
|
||||||
|
DBMS_OUTPUT.PUT_LINE(v_day);
|
||||||
|
IF v_day LIKE 'SATURDAY%' OR v_day LIKE 'SUNDAY%' THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(v_date || ' falls on weekend');
|
||||||
|
END IF;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Done . . .');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
--Rewrite using if-else
|
||||||
|
DECLARE
|
||||||
|
v_date DATE := TO_DATE('&sv_user_date', 'DD-MM-YYYY');
|
||||||
|
v_day VARCHAR2(15);
|
||||||
|
BEGIN
|
||||||
|
v_day := RTRIM(TO_CHAR(v_date, 'DAY'));
|
||||||
|
IF v_day LIKE 'SATURDAY%' OR v_day LIKE 'SUNDAY%' THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(v_date || ' falls on weekend');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE(v_date || ' does not fall on weekend');
|
||||||
|
END IF;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Done . . .');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
--rewrite using SYSDATE
|
||||||
|
DECLARE
|
||||||
|
v_date DATE := SYSDATE;
|
||||||
|
v_day VARCHAR2(15);
|
||||||
|
v_time VARCHAR2(15);
|
||||||
|
BEGIN
|
||||||
|
v_day := RTRIM(TO_CHAR(v_date, 'DAY'));
|
||||||
|
v_time := TO_CHAR(v_date, 'HH24:MI');
|
||||||
|
IF v_day LIKE 'SATURDAY%' OR v_day LIKE 'SUNDAY%' THEN
|
||||||
|
IF TO_NUMBER(TO_CHAR(v_date, 'HH24')) < 12 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(v_date || ' falls on weekend in the morning');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE(v_date || ' falls on weekend in the afternoon');
|
||||||
|
END IF;
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE(v_date || ' does not fall on weekend');
|
||||||
|
END IF;
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Done . . .');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
--4.3)
|
||||||
|
DECLARE
|
||||||
|
v_instructor_id NUMBER;
|
||||||
|
v_section_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
-- Prompt the user to input the instructor ID
|
||||||
|
v_instructor_id := &instructor_id;
|
||||||
|
|
||||||
|
-- Query to count the number of sections taught by the instructor
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO v_section_count
|
||||||
|
FROM sections
|
||||||
|
WHERE instructor_id = v_instructor_id;
|
||||||
|
|
||||||
|
-- Check if the number of sections is greater than 3
|
||||||
|
IF v_section_count > 3 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Instructor ' || v_instructor_id || ' needs a vacation');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Instructor ' || v_instructor_id || ' teaches ' || v_section_count || ' sections');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
--Aufgabe 4.4
|
||||||
|
--Block 1
|
||||||
|
DECLARE
|
||||||
|
v_num NUMBER;
|
||||||
|
BEGIN
|
||||||
|
IF v_num > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('v_num is greater than 0');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('v_num is not greater than 0');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
--Block 2
|
||||||
|
DECLARE
|
||||||
|
v_num NUMBER;
|
||||||
|
BEGIN
|
||||||
|
IF v_num > 0 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('v_num is greater than 0');
|
||||||
|
END IF;
|
||||||
|
IF NOT (v_num > 0) THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('v_num is not greater than 0');
|
||||||
|
END IF;
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
--Aufgabe 4.5
|
||||||
|
DECLARE
|
||||||
|
v_date DATE := SYSDATE;
|
||||||
|
v_day VARCHAR2(15);
|
||||||
|
v_time VARCHAR2(15);
|
||||||
|
BEGIN
|
||||||
|
v_day := RTRIM(TO_CHAR(v_date, 'DAY'));
|
||||||
|
v_time := TO_CHAR(v_date, 'HH24:MI');
|
||||||
|
|
||||||
|
CASE
|
||||||
|
WHEN v_day LIKE 'SATURDAY%' OR v_day LIKE 'SUNDAY%' THEN
|
||||||
|
CASE
|
||||||
|
WHEN TO_NUMBER(TO_CHAR(v_date, 'HH24')) < 12 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE(v_date || ' falls on weekend in the morning');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE(v_date || ' falls on weekend in the afternoon');
|
||||||
|
END CASE;
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE(v_date || ' does not fall on weekend');
|
||||||
|
END CASE;
|
||||||
|
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Done . . .');
|
||||||
|
END;
|
||||||
|
/
|
||||||
|
|
||||||
|
--Aufgabe 4.6
|
||||||
|
DECLARE
|
||||||
|
v_instructor_id NUMBER;
|
||||||
|
v_section_count NUMBER;
|
||||||
|
BEGIN
|
||||||
|
-- Prompt the user to input the instructor ID
|
||||||
|
v_instructor_id := &instructor_id;
|
||||||
|
|
||||||
|
-- Query to count the number of sections taught by the instructor
|
||||||
|
SELECT COUNT(*)
|
||||||
|
INTO v_section_count
|
||||||
|
FROM sections
|
||||||
|
WHERE instructor_id = v_instructor_id;
|
||||||
|
|
||||||
|
-- Use a CASE statement to determine the output message
|
||||||
|
CASE
|
||||||
|
WHEN v_section_count > 3 THEN
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Instructor ' || v_instructor_id || ' needs a vacation');
|
||||||
|
ELSE
|
||||||
|
DBMS_OUTPUT.PUT_LINE('Instructor ' || v_instructor_id || ' teaches ' || v_section_count || ' sections');
|
||||||
|
END CASE;
|
||||||
|
END;
|
||||||
|
/
|
||||||
Reference in New Issue
Block a user