added ÜZ 14

This commit is contained in:
2025-05-17 13:29:06 +02:00
parent b6b70a9116
commit d47add691b
2 changed files with 142 additions and 0 deletions

59
Uebungszettel_14.sql Normal file
View File

@@ -0,0 +1,59 @@
SET SERVEROUTPUT ON;
Drop table IdVal;
CREATE TABLE IdVal (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY ,
val NUMBER(3)
);
DECLARE
v_count NUMBER := 300;
v_num NUMBER := 1;
BEGIN
FOR a IN 0..900 LOOP
IF a >= v_count THEN
v_count := v_count + 300;
v_num := v_num + 1;
END IF;
Insert into IdVal (val) values (v_num);
END LOOP;
END;
/
CREATE OR REPLACE PACKAGE delete_counter
AS
v_oldTable NUMBER;
v_newTable NUMBER;
END delete_counter;
/
CREATE OR REPLACE TRIGGER delete_trigger_before
BEFORE DELETE
ON IdVal
BEGIN
SELECT COUNT(*) INTO delete_counter.v_oldTable
FROM IdVal;
END delete_trigger_before;
/
CREATE OR REPLACE TRIGGER delete_trigger_after
AFTER DELETE
ON IdVal
BEGIN
SELECT COUNT(*) INTO delete_counter.v_newTable
FROM IdVal;
DBMS_OUTPUT.PUT_LINE('NEW: '||delete_counter.v_newTable);
DBMS_OUTPUT.PUT_LINE('OLD: '||delete_counter.v_oldTable);
IF delete_counter.v_newTable < (delete_counter.v_oldTable/2) THEN
Raise_Application_error(-20001, 'TOOO mUch DelEteED!?=');
END IF;
END delete_trigger_after;
/
DELETE FROM IdVal WHERE ROWNUM < 500;

83
plfprep.sql Normal file
View File

@@ -0,0 +1,83 @@
Create or replace Package manage_students
Is
Procedure display_student_count;
Procedure find_student_name
(i_student_id In student.id%Type,
o_last_name Out student.last_name%Type,
o_first_name Out student.first_name%Type);
Function id_is_good
(i_student_id In student.id%Type)
Return Boolean;
Begin
End manage_students;
Create or replace Package Body manage_students
Is
Procedure display_student_count
Is
v_count Integer;
Begin
select Count(*)
Into v_count
From student;
dbms(v_count);
End display_student_count;
Procedure find_student_name
(i_student_id In student.id%Type,
o_last_name Out student.last_name%Type,
o_first_name Out student.first_name%Type)
Is
Begin
select first_name, last_name
Into o_first_name, o_last_name
From student
Where i_student_id = student_id;
End find_student_name;
Function id_is_good
(i_student_id In student.id%Type)
Return Boolean
Is
v_count Integer;
Begin
Select Count(*)
Into v_count
From student;
Return Count=1;
Exception
When others Then
Return False;
End id_is_good;
Begin
End manage_students;
Create or replace Trigger student_bi
Before Insert on student
For each Row
Begin
-- :New.student_id := sequence_student.NextVal;
:New.created_By := User;
:New.created_Date := Sysdate;
if(TRUE<>manage_students.id_is_good(:New.student_id)) Then
Raise_Application_Error(-20000, 'Id already in Use');
Endif;
End student_bi;
Create Or replace Trigger student_ai
After Insert On student
Begin
Insert Into protocol (t_table, t_action, t_date)
Values('student', 'insert', Sysdate);
End student_ai;
Declare
Cursor c_students (v_student_Id student.id%type)
Is
Select * From student
Where student_id = v_student_Id;
Begin
For v_student In c_students(1) Loop
dbms(v_student.first_name);
End Loop;
End;