【问题标题】:how do i verify a row before and after update如何在更新前后验证一行
【发布时间】:2019-04-07 15:29:41
【问题描述】:

需要以某种方式编码,如果买家购买的数量超过库存控制台应该显示一条消息,即您现在只能购买可用数量,其余数量将很快更新,如果库存足够购买它应该显示请继续

简而言之,“在表 order_line 中插入一行之前验证现有数量并更新表库存的现有数量的函数、过程”

CREATE OR REPLACE PACKAGE order_package IS
          global_inv_id NUMBER (6);
          global_quantity NUMBER (6);
    PROCEDURE create_new_order(current_c_id NUMBER,
 current_meth_pmt VARCHAR2, current_os_id NUMBER);
   PROCEDURE create_new_order_line(current_o_id NUMBER);
       END;
        /


CREATE OR REPLACE PACKAGE BODY order_package IS

    PROCEDURE create_new_order(current_c_id NUMBER,
 current_meth_pmt VARCHAR2, current_os_id NUMBER) AS
         current_o_id NUMBER;
       BEGIN
         SELECT order_seq.NEXTVAL
         INTO  current_o_id
         FROM   dual;
           INSERT INTO orders
     VALUES(current_o_id, sysdate,current_meth_pmt, current_c_id,
       current_os_id);
          COMMIT;
       create_new_order_line(current_o_id);
       END create_new_order;
   PROCEDURE create_new_order_line(current_o_id NUMBER)AS
       BEGIN
       INSERT INTO order_line
    VALUES(current_o_id,global_inv_id, global_quantity);
         COMMIT;
        END create_new_order_line;
       END;
        /

【问题讨论】:

    标签: sql database oracle plsql


    【解决方案1】:

    您没有显示您的库存表,并且您的程序似乎没有数量订购值,因此其中一些是推测性的。您可能想要做的是首先更新该表并使用RETURNING INTO 子句获取更新后的库存。

    UPDATE inventory SET global_quantity = global_quantity - order_quantity
     WHERE global_inv_id = current_c_id
    RETURNING global_quantity INTO l_global_quantity;
    
    IF l_global_quantity < 0 THEN
        ROLLBACK;
        raise_application_error( -20001, 'You ordered too much!' );
    ELSE
        [... create order goes here ...]
    END IF;
    

    current_c_id 是正在订购的商品吗?这将引发一个异常,它应该被调用你的过程的任何东西捕获。如何向用户显示错误取决于所使用的应用程序层。

    【讨论】:

    • 这是我的订单表:
    • 订单表:CREATE TABLE orders(o_id NUMBER(8), o_date DATE,o_methpmt VARCHAR2(10),c_id NUMBER(5),os_id NUMBER(3),这是订单行表CREATE TABLE order_line (o_id NUMBER(8), inv_id NUMBER(10), ol_quantity NUMBER(4) NOT NULL, 这是库存表 CREATE TABLE 库存 (inv_id NUMBER(10),item_id NUMBER(8),color VARCHAR2(20),inv_size VARCHAR2(10),inv_price NUMBER(6,2),inv_qoh NUMBER(4),
    • current_c_id 是客户 ID
    猜你喜欢
    • 2012-01-09
    • 2015-05-19
    • 2020-12-27
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    相关资源
    最近更新 更多