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

Расчёт суммы за товар

1. Рассчитаем стоимость товара, сумму налога и общую сумму по позиции. Для этого будем использовать команду UPDATE.

update expos set cost = price * quant

В команде UPADTE указываем имя таблицы – это expos.

В команде нет конструкции WHERE. Значит, будут задействованы все записи таблицы.

Для каждой записи будет рассчитано значение колонки cost. Выражение для расчёта использует значения, которые на этот момент есть в колонках price и quant для изменяемой записи.

Обращаю внимание: значение колонки cost в первой и второй записях тоже будут пересчитаны.

2. Выполним команду. Вводим “/”.

Изменились четыре строки.

3. Запишем команду в файл.

save upd_expos

4. Смотрим результат работы команды UPDATE.

select * from expos;

Теперь во всех записях колонка cost заполнена.

5. Добавляем в файл upd_expos ещё две команды UPDATE для расчёта суммы налога и общей суммы. Переходим в текстовый редактор и делаем правки.

edit upd_expos

update expos set cost = price * quant

/

update expos set sum_tax = cost * tax / 100

/

update expos set sum_pos = cost + sum_tax

/

Выходим из редактора, подтверждаем перезапись файла.

6. Выполним скрипт.

@upd_expos

Видим, что каждая команда изменила по 4 записи.

7. Проверяем результат расчёта.

select * from expos;

Лекция 6: Изменение записей.

Продолжим практическую работу.

Добавление записей с услугами

Сначала добавим две записи в таблицу услуг exsvc, а затем рассчитаем стоимость услуг.

1. desc exsvc

2.

insert into exsvc

( doc_nd

, doc_dd

, service_n

, tax)

values

( 137

, '12-sep-2003'

, 'услуги доставки'

, 18);

3. save ins_exsvc1

4.

insert into exsvc

( doc_nd

, doc_dd

, service_n

, tax)

values

( 137

, '12-sep-2003'

, 'услуги упаковки'

, 18)

5. save ins_exsvc2

6. col service_n for a16

7. select * from exsvc;

В таблице exsvc две записи. Стоимость услуг не заполнена.

Расчёт стоимости услуг упаковки

1. Выполним следующую команду. Она рассчитывает стоимость упаковки для позиции "Банки стеклянные".

select good_n

, quant *1 *1.00 as cost

from expos

where good_n = 'Банки стеклянные';

Команда выбрала только одну из четырех имеющихся записей. В колонке cost выведено рассчитанное значение. Оно отличается от того, которое хранится в записи в колонке с таким же именем cost.

Вспоминаем алгоритм расчёта стоимости упаковки. Значения коэффициентов в формулу подставили из справочной таблицы.

Особенности команды.

В списке выводимых значений добавили вычисляемую колонку. Задали для неё имя "cost". Для этого использовали ключевое слово "as".

С помощью конструкции WHERE ограничили выборку. Читаем только записи, для которых выполняется условие: поле good_n имеет значение "Банки стеклянные". При сравнении учитывается регистр букв.

Условие - это логическое выражение. Оно может быть "вычислено" и результат вычисления может быть либо "истина", либо "ложь", либо "NULL". Если условие истинно, значит, оно выполняется. Если ложно, то не выполняется. Если NULL, то ничего нельзя сказать.

При составлении условия можно использовать: имена колонок; константы: числа, строки, даты; арифметические выражения. Как правило условие имеет две сравниваемые части. В качестве операторов сравнения используют знаки: <, >, =, !=, <=,>=.

2. Расчёт стоимости упаковки для второй позиции.

select good_n

, quant *1 * 1.7 as cost

from expos

where good_n like 'Горшки%';

Особенность команды в использование оператора LIKE. Он используется для проверки: подходит ли символьная строка под заданный шаблон. Символ "%" используют в шаблоне для обозначения незначимой части строки.

В команде SELECT проверяются значения колонки good_n. Любая запись, которая начинается с подстроки "Горшки", попадает в результирующий набор.

3. Для третьей позиции "Грунт" расчёт услуг упаковки не требуется, этого товара нет в справочной таблице. Выполняем расчёт стоимости упаковки медицинских пробок.

select good_n

, ROUND(quant / 10, 0) * 1.5 as cost

from expos

where good_n like '%робк%'

Команда использует оператор LIKE для поиска записей, у которых в названии товара содержится подстрока "робк". Неважно где она встретиться в начале или в конце строки. Обратите внимание на двойное использование символа "%".

Арифметическое выражение использует функцию ORACLE округления ROUND. В качестве первого аргумента передаётся результат деления – значение, которое требуется округлить. Второй аргумент задаёт количество знаков после десятичной точки, до которых будет округлено значение. В этой команде округление будет выполнено до единиц.