Настоящий документ является доказательством процедуры концепции. Он не имеет проверки или обработки ошибок, которые мы ожидаем в правильной процедуре.
create or replace procedure update_order
(p_order_id in orders.id%type
, p_additional_qty in orders.qty%type
, p_orig_total out number
, p_new_total out number)
is
l_total number;
l_orig number;
begin
update orders
set qty = qty + p_additional_qty
where id = p_order_id
returning (qty - p_additional_qty)* price
, qty * price into l_orig, l_total;
p_orig_total := l_orig;
p_new_total := l_total;
end update_order;
/
В SQL * Plus мы используем команду ACCEPT для получения входных значений от пользователя. Мы объявляем переменные для хранения вычисленных значений с помощью VAR и выводим их с помощью PRINT.
Вот тестовые данные:
SQL> select * from orders;
ID QTY PRICE
---------- ---------- ----------
42 23 19.99
SQL>
А вот как мы называем процедуру с помощью SQL * Plus EXECUTE команду:
SQL> var tot number
SQL> var orig number
SQL> accept order_id prompt "enter order ID: "
enter order ID: 42
SQL> accept add_qty prompt "please enter add qty: "
please enter add qty: 77
SQL> exec update_order (&order_id, &add_qty, :orig, :tot)
PL/SQL procedure successfully completed.
SQL> print :orig
ORIG
----------
459.77
SQL> print :tot
TOT
----------
1999
SQL>
Для скрипта, просто поместите все команды в текстовый файл и запустить его в SQL * Plus, как это:
SQL> @your_script.sql
Обратите внимание, что я отклонился от инструкций вашего задания несколькими способами.
- Я не показываю первоначальную общую стоимость аванса. Для этого вам нужно сначала выбрать запись, а затем обновить ее. В реальной жизни мы хотели бы избежать двух операций.
- Я вычисляю итоговые суммы, а затем сохраняю их. Опять же, это подход, который мы возьмем в реальной системе. Однако, если в вашей таблице есть столбец TOTAL_COST, вам необходимо внести изменения в UPDATE.
Почему вы не уверены в структуре? Это сработало? Кроме того, почему вы вообще сохраняете total_cost? – GolezTrol
не уверен, как его решить. вы можете мне помочь? – Jaad