假设客户4希望将订单从23增加到100.让用户输入:
我想写一个PL / SQL函数来接收这两个值并更新sales表以反映这个变化。从代码的主要部分在屏幕上打印出更新前后客户4的总数量。请帮助我尝试使用以下代码但不确定结构
CREATE OR REPLACE TRIGGER orders_before_insert
BEFORE INSERT
ON ord
FOR EACH ROW
DECLARE
v_price NUMBER;
new number;
BEGIN
SELECT pr INTO v_price FROM product where product_id =:new.product_id
;
-- Update create_date field to current system date
:new.total_cost := :new.quantity * v_price;
END;
答案 0 :(得分:3)
这是一个概念验证程序。它没有在正确的程序中进行验证或错误处理。
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
请注意,我已经通过几种方式偏离了您的作业说明。