
- •Лабораторная работа № 3
- •1. Проанализируйте блок кода и ответьте на вопросы:
- •4. В этом задании вы будете работать с переменными подстановки, запрашивая их
- •Лабораторная работа № 4
- •3. С помощью инструкции update измените значение location_id, для вновь
- •4. Откройте скрипт lab_03_05b.Sql.
- •Лабораторная работа № 5
- •Лабораторная работа № 6
- •1. Напишите скрипт для распечатки информации о выбранной стране:
- •2. Напишите блок кода для выборки имени u1076 департамента из специальной структуры
- •3. Измените скрипт из второго пункта, таким образом, чтобы в индексированной таблице хранились записи (record), содержащие всю информацию об отделах.
- •Лабораторная работа № 7.
- •Лабораторная работа № 8.
- •1. Основная задача этого упражнения – продемонстрировать использование
- •3. Загрузите скрипт lab_07_04_soln.Sql.
Лабораторная работа № 5
1. Выполните скрипт lab_05_01.sql для создания таблицы messages . Напишите блок
кода для заполнения таблицы:
a. Добавьте числа в интервале от 1 до 10, пропустив 6 и 8. По одному числу на
строку.
b. Добавьте инструкцию COMMIT в конце блока.
BEGIN FOR i IN 1..10 LOOP IF i=6 or i = 8 THEN CONTINUE; END IF; INSERT INTO messages (results) VALUES(i); END LOOP; COMMIT; END; |
c. Проверьте результат с помощью инструкции SELECT.
2. Выполните скрипт lab_05_02.sql. Этот скрипт создает реплику таблицы employees
с именем emp и добавляет в нее новый столбец stars типа VARCHR2(50). Вам надо
создать PL\SQL блок, который добавляет по одной «*» за каждую 1000$ в зарплате
сотрудника.
a. С помощью инструкции DEFINE определите переменную empno и
присвойте ей 176.
b. В начале исполняемого блока инициализируйте empno с помощью
переменной подстановки.
c. Декларируйте переменную asteriks типа emp.stars и присвойте ей значение
NULL; Декларируйте переменную sal типа emp.salary.
d. В исполняемой секции напишите блок кода, с помощью которого
переменная asteriks получает по одной звездочке за каждую $1000 в
зарплате сотрудника.
e. Обновите столбец stars сотрудника с помощью полученного значения
строчной переменной asteriks.
f. Добавьте в конец исполняемого блока инструкцию COMMIT.
g. С помощью инструкции SELECT выведите из таблицы измененную
строчку.
h. Сохраните скрипт в файле lab_05_02_soln.sql
DEFINE empno=176; DECLARE asteriks emp.stars%type:=NULL; sal emp.salary%type; BEGIN SELECT salary INTO sal FROM employee_details WHERE employee_id = &empno; sal:=sal-1000; WHILE sal>0 LOOP asteriks:=asteriks || '*'; sal:=sal-1000; END LOOP; UPDATE emp SET stars = asteriks WHERE employee_id = &empno; COMMIT; SELECT salary, asteriks INTO sal, asteriks FROM emp WHERE employee_id = &empno; DBMS_OUTPUT.ENABLE(); DBMS_OUTPUT.PUT_LINE('Salary ' || sal || ' asterisk ' || asteriks); END; |
i. Результат должен выглядеть примерно так:
anonymous block completed Salary 8600 asterisk ******** |
3. Загрузите скрипт lab_04_04_soln.sql который вы создали в 4 работе.
a. Найдите комментарий “INCLUDE SIMPLE IF STATEMENT HERE” и
добавьте в этом месте инструкцию IF для проверки равенства переменных
emp_id и emp_authorization.
b. Сохраните скрипт под именем lab_05_03_soln.sql
SET SERVEROUTPUT ON SET VERIFY OFF ACCEPT emp_id PROMPT 'Please enter your employee number'; ACCEPT emp_deptid PROMPT 'Please enter the department number for which salary revision is being done';
DECLARE emp_authorization NUMBER(5); emp_id NUMBER(5):=&emp_id; emp_deptid NUMBER(6):=&emp_deptid; no_such_employee EXCEPTION; v_employee_id employee_details.employee_id%type;
-- INCLUDE EXECUTABLE SECTION OF OUTER BLOCK HERE BEGIN -- RAISE EXCEPTION HERE
-- INCLUDE SIMPLE IF STATEMENT HERE IF emp_authorization = emp_id THEN SELECT employee_id INTO v_employee_id FROM employee_details WHERE department_id IN (SELECT department_id FROM departments WHERE department_name = 'Human Resources'); DECLARE emp_sal employee_details.salary%TYPE; emp_fname employee_details.first_name%TYPE; emp_lname employee_details.last_name%TYPE; i NUMBER:=1;
-- DECLARE AN INDEX BY TABLE OF TYPE VARCHAR2(50). CALL -- IT ename_table_type
-- DECLARE A VARIABLE ename_table OF TYPE ename_table_type
c_hike1 constant real :=.20; c_hike2 constant real :=.15; c_hike3 constant real :=.08; c_hike4 constant real :=.03;
c_range1 constant number :=6500; c_range2 constant number :=9500; c_range3 constant number :=12000; BEGIN NULL; END; -- DECLARE A CURSOR CALLED emp_records TO HOLD salary, -- first_name, and last_name of employees
-- INCLUDE EXECUTABLE SECTION OF INNER BLOCK HERE
-- CLOSE THE INNER BLOCK
ELSE DBMS_OUTPUT.PUT_LINE ('SORRY YOU ARE NOT AUTHORIZED TO USE THIS APPLICATION'); END IF;
-- INCLUDE EXCEPTION SECTION FOR OUTER BLOCK EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE('Exception occured'); -- CLOSE THE OUTER BLOCK END; |