СПбГУ НИУ ИТМО/КТУ/КОТ/группы х108

Вторник, 07.01.2025, 17:37

Приветствую Вас Гость RSS | Главная | Карта сайта
Архив работ кафедры компьютерных образовательных технологий
Регистрация | Вход

Главная » Файлы » 3 КУРС » Управление данными

В категории материалов: 8
Показано материалов: 1-5
Страницы: 1 2 »

Сортировать по: Дате · Названию · Рейтингу · Комментариям · Загрузкам · Просмотрам
№ 11 Курсоры
Управление данными
Напишите процедуру SET_INCREASE(SL_LIM NUMBER, INC_VAL NUMBER), которая увеличивает надбавку STAFF. INCREASE на заданную во входных параметрах величину INC_VAL при условии, что оклад сотрудника JOBS.SALARY ниже уровня SL_LIM заданного во входных параметрах.
Для реализации поставленной задачи используйте явные курсоры с обновлением. Причем поле STAFF.INCREASE должно быть заблокировано для других сеансов до тех пор, пока не будут обновлены все записи в таблице STAFF. После выполнения всех изменений блокировка с таблицы должна быть снята. Объявление курсора должно быть произведено таким образом, чтобы при попытке обновления ранее заблокированного поля STAFF.INCREASE, процедура обновления ждала до тех пор, пока поле не будет разблокировано. При обновлении поля STAFF. INCREASE нужно учесть, что надбавка может равняться NULL, в этом случае нужно считать ее равной нулю.
В отчет нужно поместить код создания процедуры, пример вызова процедуры с параметрами SET_INCREASE(20000, 1000), выборку из таблицы STAFF для определения корректности работы процедуры.
Управление данными | Просмотров: 445 | Загрузок: 19 | Добавил: a1 | Дата: 05.12.2011 | 19:34 | Комментарии (0)

a)1.Последовательность:

CREATE SEQUENCE staff_id

INCREMENT BY 1

START WITH 13;

 

2.Процедура:

CREATE OR REPLACE

PROCEDURE addEmployee(first_name varchar2, last_name varchar2, email varchar2, phone varchar2, birthday date, job varchar2, department varchar2) IS

     s_id number;

     j_id number;

     d_id number;

BEGIN

if regexp_like(email, '\w+@\w+(\.\w{2,4}){1,2}') then

  if regexp_like(phone, '^\(\d{3}\)\d{3}-\d{2}-\d{2}$') then

    if trunc(months_between(sysdate, birthday) / 12) >= 18 then

      SELECT staff_id.nextval INTO s_id FROM DUAL;

      begin

        SELECT job_id INTO j_id FROM jobs WHERE lower(job_name) = lower(job);

      exception

        when NO_DATA_FOUND then raise_application_error(-20903, 'Bad job name');

      end;     

      begin

        SELECT department_id INTO d_id FROM departments WHERE lower(department_name) = lower(department);

      exception

        when NO_DATA_FOUND then raise_application_error(-20904, 'Bad department name');

      end;

      INSERT INTO staff VALUES(s_id, UPPER(SUBSTR(first_name, 1, 1)) || LOWER(SUBSTR(first_name, 2)), UPPER(SUBSTR(last_name, 1, 1)) || LOWER(SUBSTR(last_name, 2)), email, phone, SYSDATE, birthday, null, j_id, d_id);

    else raise_application_error(-20902, 'Too young');

    end if;

  else raise_application_error(-20901, 'Bad phone number');

  end if;

else raise_application_error(-20900, 'Bad e-mail');

end if;

END;

Управление данными | Просмотров: 445 | Загрузок: 36 | Добавил: a1 | Дата: 05.12.2011 | 19:34 | Комментарии (0)

№ 9 Представления
Управление данными
Используя данные из таблиц staff, jobs, departments и locations, создайте представление (view), которое будет содержать информацию о ФИО сотрудника, должности, отделе в котором он работает, его местонахождении и зарплате ([оклад /jobs.salary/ + надбавка /staff.increase/] - 13%). Необходимо учесть, что надбавка может иметь значение null, если это так, то считать надбавку равной нулю. Зарплата должна быть выведена в формате XXXXX.XXр. Местонахождение должно включать в себя название и описание, разделенные запятой. Записи должны быть отсортированы по ФИО по возростанию. Выводиться должно не более десяти записей. Запрос по созданному представлению (select * from view1) должен соответствовать следующей таблице (пример):
Управление данными | Просмотров: 444 | Загрузок: 28 | Добавил: a1 | Дата: 05.12.2011 | 19:34 | Комментарии (0)

Создайте триггер, который при изменении данных (INSERT, UPDATE) в таблице listeners приводит к единому формату фамилию и имя добавляемого слушателя курсов. Первая буква фамилии и имени заглавная, остальные строчные. А также выводит информацию об исключении, возникающем при несоблюдении формата для телефонных номеров (XXX)XXX-XX-XX. Для получения идентификатора слушателя (listeners.LSTNR_ID), используйте нециклическую последовательность (sequence). Начальное значение для последовательности определяется номером последней записи в таблице. Шаг последовательности - единица.
В отчет нужно поместить код создания последовательности, триггера, пример изменения данных и выборка результата для определения корректности работы триггера.
Управление данными | Просмотров: 447 | Загрузок: 31 | Добавил: a1 | Дата: 05.12.2011 | 19:33 | Комментарии (0)

№ 7 Объединения (UNION, INTERSECT, MINUS)
Управление данными
1. Загрузите данные из source3.sql в базу. Используя объединения, напишите запрос, который, используя информацию из таблиц staff и listeners, выводит список людей, посещающих курсы повышения квалификации. Причем ФИО должны выводиться в особом порядке: сначала выводятся сотрудники, посещающие курсы, отсортированные по алфавиту, а ниже выводятся слушатели курсов не являющиеся сотрудниками, тоже отсортированные по алфавиту
Управление данными | Просмотров: 444 | Загрузок: 38 | Добавил: a1 | Дата: 05.12.2011 | 19:33 | Комментарии (0)

1-5 6-8

Counter-Strike IFMO version

Меню сайта

Форма входа

Поиск

Мини-чат

Статистика


Онлайн всего: 1
Гостей: 1
Пользователей: 0