1. Exercise
Create a Stored Procedure NEW_SAL with two parameter (empno and new_sal). The purpose of this procedure is to update the attribute sal in the table. The update is allowed only between 9:00 AM and 5.00 PM.
When you run the test block, you will receive the message Salary Updated. You are doing this lesson at night, else you will receive the message Try again tomorrow morning.
create or replace procedure NEW_SAL_TWO(p_empno in EMP.EMPNO%type, p_new_sal in EMP.SAL%type)
as
v_current_time date;
v_min_time date;
v_max_time date;
begin
-- check the given time:
select sysdate, (trunc(sysdate) + 9/24), (trunc(sysdate) + 17/24) into v_current_time, v_min_time, v_max_time from dual;
if (v_current_time not between v_min_time and v_max_time) then
DBMS_OUTPUT.PUT_LINE('Try again tomorrow morning');
return;
end if;
-- if time is right, continue here:
update emp t set t.SAL = p_new_sal where t.EMPNO = p_empno;
DBMS_OUTPUT.PUT_LINE('Salary Updated');
end;
/
begin
NEW_SAL_TWO(1, 200);
commit;
end;
/
2. Exercise
Erstelle eine Stored Procedure SAL_BEST mit folgenden Parametern: Eingabeparameter: ANZAHL
Die ersten ANZAHL Mitarbeiter mit dem höchsten Gehalt sollen in die Tabelle BEST_SAL eingetragen werden. Vorher soll die Prozedur eventuell noch vorhan- dene Sätze aus der Tabelle BEST_SAL löschen.
Die Tabelle BEST_SAL soll außerhalb der Prozedur mit den Spalten ENAME und SAL erstellt werden.
Teste die Prozedur.
create table BEST_SAL as select * from EMP where 1 = 0;
create or replace procedure SAL_BEST(p_anzahl in number)
as
begin
-- werte löschen
delete BEST_SAL;
-- neue werte einfügen
insert into BEST_SAL select * from (select * from EMP order by SAL desc) where ROWNUM <= 5;
end;
/
begin
SAL_BEST(20);
commit;
end;
/
3. Exercise
Erstelle eine Stored Procedure TABSTRUCT mit folgenden Parametern:
Eingabeparameter: TABNAME
Zum übergebenen Tabellennamen soll die Tabellenstruktur ermittelt und ausge-
geben werden.
Die Ausgabe sollte folgendes Aussehen haben (z.B. für DEPT):
-
DEPTNO NUMBER(2) NOT NULL
-
DNAME VARCHAR2(14) NULL
-
LOC VARCHAR2(13) NULL
Teste die Prozedur.
create or replace procedure TABSTRUCT(p_tabname in varchar)
as
cursor curs is SELECT COLUMN_NAME,
DATA_TYPE,
DATA_PRECISION,
replace(replace(NULLABLE, 'N', 'NOT NULL'), 'Y', 'NULL') as nullable
FROM ALL_TAB_COLUMNS
WHERE TABLE_NAME = 'DEPT' and OWNER = (select user from dual);
v_data_pres number;
v_output varchar(100);
begin
FOR rec in curs
loop
v_data_pres := rec.DATA_PRECISION;
if v_data_pres is null then
v_output := '';
else
v_output := ' (' || rec.DATA_PRECISION || ')';
end if;
DBMS_OUTPUT.PUT_LINE(rpad(rec.COLUMN_NAME, 10, ' ') || rpad((rec.DATA_TYPE || v_output), 15, ' ') || rec.nullable);
end loop;
end;
/
begin
TABSTRUCT('DEPT');
end;
/
4. Exercise
Erstelle eine Stored Procedure TABCONS mit folgenden Parametern:
Eingabeparameter:
TABNAME
Zum übergebenen Tabellennamen soll die Constraints dieser Tabelle ermittelt
und ausgegeben werden.
Die Ausgabe sollte folgendes Aussehen haben (z.B. für EMP):
select * from ALL_TAB_COLUMNS where OWNER = user and TABLE_NAME = 'EMP';