Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:3682SAS / практика
.txt 1. Создать таблицу на основе таблицы mai.sotr
create table m_sotr
as select * from mai.sotr
select * from m_sotr
2. Написать хранимую процедуру переводящую сотрудника в другой отдел, если там не более 40 человек.
create table m_sotr
as select * from mai.sotr
select * from m_sotr
create or replace procedure perevod (nomer_sotr number, new_otd number)
is
a1 number(5);
otd number (5);
ex1 exception;
ex2 exception;
begin
select count(*) into a1 from m_sotr where nom_sotr=nomer_sotr;
if a1=0 then
raise ex1;
end if;
select count(*) into otd from M_sotr where nom_otd=new_otd;
if otd>40 then
raise ex2;
end if;
update m_sotr set nom_otd=new_otd where nom_sotr=nomer_sotr;
exception
when ex1 then
dbms_output.put_line('Нет сотрудника c nomer '||nomer_sotr);
when ex2 then
dbms_output.put_line('Количество сотрудников больше 40 кол-во= '||otd);
end;
select * from user_errors where name='PEREVOD'
select * from m_sotr order by nom_sotr
execute perevod(9,101)
select nom_otd from M_sotr group by nom_otd having count(*)<40
select * from M_sotr where nom_sotr=9
3. Написать триггер, не позволяющий изменять зарплату работнику.
create table m_sotr
as select * from mai.sotr
select * from m_sotr
2. Написать хранимую процедуру переводящую сотрудника в другой отдел, если там не более 40 человек.
create table m_sotr
as select * from mai.sotr
select * from m_sotr
create or replace procedure perevod (nomer_sotr number, new_otd number)
is
a1 number(5);
otd number (5);
ex1 exception;
ex2 exception;
begin
select count(*) into a1 from m_sotr where nom_sotr=nomer_sotr;
if a1=0 then
raise ex1;
end if;
select count(*) into otd from M_sotr where nom_otd=new_otd;
if otd>40 then
raise ex2;
end if;
update m_sotr set nom_otd=new_otd where nom_sotr=nomer_sotr;
exception
when ex1 then
dbms_output.put_line('Нет сотрудника c nomer '||nomer_sotr);
when ex2 then
dbms_output.put_line('Количество сотрудников больше 40 кол-во= '||otd);
end;
select * from user_errors where name='PEREVOD'
select * from m_sotr order by nom_sotr
execute perevod(9,101)
select nom_otd from M_sotr group by nom_otd having count(*)<40
select * from M_sotr where nom_sotr=9
3. Написать триггер, не позволяющий изменять зарплату работнику.