[英]update/insert PL/SQL
假設客戶4希望將其訂單從23個增加到100個。使用戶能夠輸入:
我想編寫一個PL / SQL函數來接收這兩個值並更新銷售表以反映此更改。 從代碼的主要部分在屏幕上打印更新前后客戶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;
這是概念證明程序。 它沒有我們期望在適當過程中進行的驗證或錯誤處理。
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
請注意,我以幾種方式偏離了您作業的說明。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.