Решение. DBMS_OUTPUT.PUT_LINE ('Нет накладной с номером '||TO_CHAR(&n));
DBMS_OUTPUT.PUT_LINE ('Нет накладной с номером '||TO_CHAR(&n)); END; /
Пример 6. Определить стаж работников с кодом должности ‘08’ SELECT ks,fio, stag(hireday,sysdate) as СТАЖ From sotrud where kd=’08’ Пример 8. Разработать процедуру для занесения имени текущего пользователя в таблицу log_users с двумя полями: код пользователя (user_name), дата и время соединения (log_date). CREATE OR REPLACE PROCEDURE ins _log_users IS BEGIN INSERT INTO log_users (user_name, log_date) values (USER,SYSDATE); END;
Для запуска процедуры: begin ins_log_users; end; Пример 9. Разработать процедуру с именем man_com, которая подсчитывает сумму продаж (vsp) определенного менеджера за заданный период времени и начисляет ему премию (vprem) в зависимости от vsp по следующему алгоритму: если vsp <20000, то vprem=vsp*0.04, если 20000=<vsp <30000, то vprem=vsp*0.05, если 30000=<vsp <40000, то vprem=vsp*0.07, если vsp >=40000, то vprem=vsp*0.09. CREATE OR REPLACE PROCEDURE man_com (km IN NUMBER:=1,d1 IN DATE, d2 IN DATE, vprem OUT NUMBER) IS vsp NUMBEr(9,2):=0; e_no_data EXCEPTION; BEGIN SELECT SUM(t.kol*t.cena) INTO vsp FROM tovar_v_nakl t INNER JOIN nakladnay n On t.n_nakl=n.n_nakl WHERE n.data_nakl>=d1 AND n.data_nakl<=d2 AND n.kod_men=km group by n.kod_men; DBMS_OUTPUT.PUT_LINE('Сумма продаж ='||TO_CHAR(vsp)); IF vsp=0 THEN RAISE e_no_data; ELSE vprem:=CASE When vsp<20000 Then vsp*0.04 when vsp>=20000 and vsp<30000 Then vsp*0.05 when vsp>=30000 and vsp<40000 Then vsp*0.07 ELSE vsp*0.09 END; END IF; EXCEPTION WHEN e_NO_DATA THEN DBMS_OUTPUT.PUT_LINE ('Проверьте правильность входных параметров'); END; / show errors
Пример 10. Написать процедуру, которая должна изменить оклад какому-то менеджеру. При этом в дополнительную таблицу history_man следует добавить новую запись, содержащую значение старого и нового окладов и дату внесения изменения в таблицу manager (подпрограмма) CREATE OR REPLACE PROCEDURE izm_oklad (pkm number, p_oklad_new number) IS Vkm number(2); voklad_old number(9,2); PROCEDURE ins_hist (pkm number, p_oklad_old number, p_oklad_new number) IS BEGIN INSERT INTO history_man VALUES (pkm, p_oklad_old, p_oklad_new,Sysdate); END ins_hist; BEGIN SELECT oklad into voklad_old FROM manager WHERE kod_men=pkm; UPDATE manager SET oklad=p_oklad_new WHERE kod_men=pkm; Ins_hist(pkm, voklad_old,p_oklad_new); EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE ('Нет менеджера с кодом, равным '|| TO_CHAR(pkm)); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM); END; /
Решение. 1. В первой и третьей строках таблицы истинности значение функции равно 1. 2. Так как строки две, получаем дизъюнкцию двух элементов: () V (). 3. Каждый логический элемент в этой дизъюнкции запишим в виде конъюнкции аргументов функции X и Y: (X & Y) V (X & Y). 4. Берем аргумент с отрицанием если его значение в соответствующей строке таблицы равно 0 и получаем искомую функцию: http://qo.do.am/publ/teorija/laboratornyj_praktikum/postroenie_tablic_istinnosti_i_logicheskik Таблица истинности – это таблица, показывающая, какие значения принимает составное высказывание при всех сочетаниях (наборах) значений входящих в него простых высказываний
|