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