BEGIN
select to_char(sysdate,’hh24’) into H from dual;
if (H>=8 AND H<=17) then
update my_tab set timesave=sysdate;
end if;
END;
/
В этом примере командой select считывается текущий час из системной даты sysdate в переменную H. Обратите внимание, что в данной команде select используется виртуальная таблица DUAL. В Oracle всегда доступна эта таблица, которая возвращает только одну строку, а в качестве возвращаемых значений будут получены в результаты вычисления всех выражений и функций, которые присутствуют в списке вывода после ключевого слова select. Форма используемой здесь команды select (с фразой into) рассматривается в параграфе 8. Затем, используя оператор IF, проверяется, попадет ли текущий час в рабочее время. Если это так, то в поле timesave таблицы my_tab записывается текущие дата и время. Если же программа выполняется в нерабочее время (т.е. условие не выполняется), то никаких изменений в базе данных происходит.
DECLARE
H number;
BEGIN
select to_char(sysdate,’hh24’) into H from dual;
if (H>=8 AND H<=12) then
update my_tab set priznak=1;
elsif (H>=13 AND H<=17) then
update my_tab set priznak=2;
else
update my_tab set priznak=null;
end if;
END;
/
В этом примере в переменную H также считывается текущий час. Если его значение попадает в предобеденное рабочее время, то в поле priznak записывается 1. Если значение попадает в послеобеденное рабочее время, то в поле priznak записывается 2. Если выполнение программы происходит в нерабочее время, то в поле priznak записывается пустое значение – null.
7.4. Оператор выбора CASE
Оператор CASE является еще одной конструкцией языка PL/SQL для выполнения условных вычислений по типу «развилка». PL/SQL предлагает два варианта оператора CASE для управления условными вычислениями. Первый вариант имеет следующий синтаксис
CASE выражение
WHEN значение1 THEN действия;
WHEN значение2 THEN действия;
…
ELSE действия;
END CASE;
Здесь выражение и значениеN – любые выражения, которое поочередно сравнивается на равенство. Если выражение равно значению1, то выполняются действия, указанные после соответствующей фразы THEN, после чего выполнение оператора CASE завершается. В противном случае проверяется, равно ли выражение и значение2, и так далее пока не будут обнаружено равенство выражения и одного из значений. Однако если этого не произойдет ни с одним из значений, то будут выполнены действия, определяемые во фразе ELSE.
Пример.
DECLARE
N number;
BEGIN
H := Last_day(sysdate);
CASE N
WHEN 28 THEN
update my_tab set priznak=1;
WHEN 29 THEN
update my_tab set priznak=1;
WHEN 30 THEN
update my_tab set priznak=2;
ELSE
update my_tab set priznak=3;
END CASE;
END;
/
В примере сначала переменной N присваивается число дней в текущем месяце (применяется функция Last_day к системной дате) . Затем проверяется, если число дней в текущем месяце равно 28 или 29, то текущий месяц – февраль, и в таблицу записывается признак 1. На этом оператор CASE завершается. Если текущий месяц не февраль, то проверяется – является ли текущий месяц месяцем, в котором 30 дней. Если да, то признаку присваивается 2. Если все выполненные проверки не дали результата, то значит текущий месяц имеет 31 день, и признаку присваивается значение 3.
Второй вариант оператора CASE имеет синтаксис
CASE
WHEN выражение1 THEN действия;
WHEN выражение2 THEN действия;
…
ELSE действия;
END CASE;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.