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

4. В этом задании вы будете работать с переменными подстановки, запрашивая их

значения в run-time. Продолжайте модифицировать скрипт из 3 пункта, или

откройте файл lab_03_04.sql из основной папки курса.

a. Добавьте в скрипт инструкцию PROMPT с информационным сообщением

«Укажите номер сотрудника».

b. Измените декларацию (или создайте) переменной empno так, чтобы она

инициализировалась значением, полученным у пользователя.

c. Измените инструкцию SELECT так, чтобы при поиске информации о

сотруднике использовать значение u1087 переменной empno.

d. Выполните скрипт и сохраните его под именем lab_03_04_soln.sql.

set serveroutput on;

ACCEPT empno PROMPT 'Укажите номер сотрудника'

Declare

fname varchar2(15);

emp_sal number(10);

begin

SELECT first_name, salary INTO fname, emp_sal FROM employees WHERE employee_id = &empno;

dbms_output.enable();

dbms_output.put_line('Hello, ' || fname);

dbms_output.put_line('Your salary is ' || emp_sal);

dbms_output.put_line('Your tax deduction is '|| emp_sal*0.45*0.12);

end;

/

e. Результат должен выглядеть примерно так:

old:Declare

fname varchar2(15);

emp_sal number(10);

begin

SELECT first_name, salary INTO fname, emp_sal FROM employees WHERE employee_id = &empno;

dbms_output.enable();

dbms_output.put_line('Hello, ' || fname);

dbms_output.put_line('Your salary is ' || emp_sal);

dbms_output.put_line('Your tax deduction is '|| emp_sal*0.45*0.12);

end;

new:Declare

fname varchar2(15);

emp_sal number(10);

begin

SELECT first_name, salary INTO fname, emp_sal FROM employees WHERE employee_id = 110;

dbms_output.enable();

dbms_output.put_line('Hello, ' || fname);

dbms_output.put_line('Your salary is ' || emp_sal);

dbms_output.put_line('Your tax deduction is '|| emp_sal*0.45*0.12);

end;

anonymous block completed

Hello, John

Your salary is 8200

Your tax deduction is 442.8

5. Выполните скрипт lab_03_05.sql (CREATE TABLE employee_details AS SELECT *

FROM EMPLOYEES). Будет создана таблица EMPLOYEE_DETAILS.

a. Таблицы employees и employee_details имеют одинаковую структуру и

данные. Все дальнейшие модификации выполняйте над данными из

таблицы employee_details.

b. Откройте скрипт lab_03_05b.sql. Посмотрите на него внимательно. Изучите

инструкции accept, которые используются для приема значений от

пользователя. Вы будете использовать этот скрипт в дальнейшем.

Лабораторная работа № 4

1. Создайте скрипт для выборки максимального номера отдела, сохраните его в

переменной max_deptno, распечатайте полученное значение:

a. Декларируйте переменную max_deptno типа NUMBER.

b. В исполняемой секции блока выберите максимальное значение номера

отдела и сохраните его в переменной

c. Распечатайте значение переменной в конце исполняемой секции.

d. Сохраните результат в файле lab_04_01_soln.sql

DECLARE

max_deptno NUMBER(10);

BEGIN

SELECT MAX(department_id) INTO max_deptno FROM departments;

DBMS_OUTPUT.ENABLE();

DBMS_OUTPUT.PUT_LINE(max_deptno);

END;

/

e. Результат должен выглядеть примерно так:

anonymous block completed

270

2. Измените скрипт из упражнения 1.

a. В скрипте lab_04_01_soln.sql декларируйте две переменные: dept_name

такого же типа, что и столбец department.department_name и связанную

переменную dept_id типа NUMBER.

b. Присвойте переменной dept_name значение «Education» в секции

декларации.

c. Прибавьте к полученному максимальному значению номера отдела 10 и

присвойте полученную цифру в переменную dept_id.

d. Воспользуйтесь значениями переменных dept_name и dept_id в инструкции

INSERT в таблицу department. Для заполнения столбца location_id

используйте NULL значение.

e. С помощью атрибута SQL%ROWCOUNT узнайте количество строк

обработанных инструкцией INSERT.

f. С помощью SELECT инструкции убедитесь, что строчка добавлена.

g. Сохраните скрипт в файле lab_04_02_soln.sql.

VARIABLE dept_id NUMBER(10);

DECLARE

max_deptno NUMBER(10);

dept_name departments.department_name%type:='Education';

BEGIN

SELECT MAX(department_id) INTO max_deptno FROM departments;

:dept_id:=max_deptno+10;

INSERT INTO departments (department_id,department_name) VALUES (:dept_id,dept_name);

DBMS_OUTPUT.ENABLE();

DBMS_OUTPUT.PUT_LINE(SQL%rowcount);

DBMS_OUTPUT.PUT_LINE(:dept_id);

DBMS_OUTPUT.PUT_LINE(max_deptno);

END;

/