更新/插入PL / SQL

时间:2015-07-11 07:15:13

标签: sql oracle plsql

假设客户4希望将订单从23增加到100.让用户输入:

  1. customer_ID的数字4
  2. 100表示​​更新的数量。
  3. 我想写一个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;
    

1 个答案:

答案 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

请注意,我已经通过几种方式偏离了您的作业说明。

  1. 我不会预先显示原始总费用。要做到这一点,您需要先选择记录然后更新它。在现实生活中,我们希望避免两次操作。
  2. 我计算总数而不是存储它们。这也是我们在真实系统中采用的方法。但是,如果您的表实际上有一个TOTAL_COST列,则需要修改UPDATE。