Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практика. Часть 1.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
238.08 Кб
Скачать

Лабораторная работа № 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;