如何在oracle中构建和执行一个过程



我在执行过程时遇到问题。当我执行我的过程时,它没有返回任何答案。我知道我的流程有问题,但是我无法解决,所以请帮我重新创建一个流程。

在展示我的代码之前,让我告诉你为什么我要创建这个过程:

我实际上是在我的项目"超市账单管理系统"中工作,我已经创建了其中的几个表,其中一个是Products表,我已经创建了FINAL_TOTAL列作为过程,现在我想要这个过程计算一个人购买的所有产品价格的总价。例如,当你去超市或任何购物中心时,买了几样东西后,他们会给你一张账单,在账单的下面,有你必须支付的最终金额。

因此,出于这个原因,我创建了这个过程。如果你知道我的代码的问题,请让我知道!!

代码:

过程

create procedure FINAL_TOTAL(C IN NUMBER, T OUT NUMBER)
IS
BEGIN
UPDATE Products
SET FinalTotal = FinalTotal + Total
WHERE ProdCustId = C;
Commit;
SELECT FinalTotal into T FROM Products WHERE ProdCustId = C;
END;
/

产品表:

create table Products
( ProdId number primary key,
ProdNum number not null unique,
ProdName varchar2(15),
ProdPrice int,
ProdQuantity int,
Total int,
FinalTotal int,
ProdCustId int references Customers,
ProdOrdId int references Orders,
ProdStoreId int references Stores
);

触发:

CREATE TRIGGER PROD_TOTAL
AFTER INSERT ON Products
BEGIN
UPDATE Products
SET Total = ProdPrice * ProdQuantity;
END;
/

在product表中插入语句:

insert into Products(ProdID,ProdNum,ProdName,ProdPrice,ProdQuantity,ProdCustId,ProdOrdId,ProdStoreId)
values(1,1001,'Syrup',30,2,1,1,1);

程序执行代码:

variable K number;
SQL> EXECUTE FINAL_TOTAL(1,:K);
PL/SQL procedure successfully completed.

输出:

select * from Products;
PRODID    PRODNUM PRODNAME         PRODPRICE PRODQUANTITY      TOTAL
---------- ---------- --------------- ---------- ------------ ----------
FINALTOTAL PRODCUSTID  PRODORDID PRODSTOREID
---------- ---------- ---------- -----------
1       1001 Syrup                   30            2         60
1          1           1

SQL> print :K
K
----------

所以,这是我的代码,我不知道我的代码有什么问题,因为我是一个初学者,我对程序没有那么多的想法,我必须在我的项目中使用程序,因为它是强制性的,所以请帮助我解决这个问题!!

FinalTotal为NULL。使用NVLCOALESCE:

... SET FinalTotal = NVL(FinalTotal,0) + Total

NULL加一个数字等于NULL。

SELECT NULL + 1 FROM DUAL; -- NULL
SELECT NVL(NULL, 0) + 1 FROM DUAL; -- 1

相关内容

最新更新