如何在 oracle 中构建和执行过程
How to build and execute a procedure in oracle
我在执行程序时遇到问题。当我执行我的程序时,它没有返回任何答案。我知道我的程序有问题,但我无法解决,所以请帮我创建一个新程序。
在展示我的代码之前,让我告诉你我为什么要创建这个过程:
我实际上正在做我的项目'Supermarket Billing management system',我已经在其中创建了一些table,一个是我创建的产品table 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;
/
产品table:
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;
/
在产品中插入语句 table:
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。使用 NVL
或 COALESCE
:
... SET FinalTotal = NVL(FinalTotal,0) + Total
NULL加上一个数字就是NULL。
SELECT NULL + 1 FROM DUAL; -- NULL
SELECT NVL(NULL, 0) + 1 FROM DUAL; -- 1
我在执行程序时遇到问题。当我执行我的程序时,它没有返回任何答案。我知道我的程序有问题,但我无法解决,所以请帮我创建一个新程序。
在展示我的代码之前,让我告诉你我为什么要创建这个过程:
我实际上正在做我的项目'Supermarket Billing management system',我已经在其中创建了一些table,一个是我创建的产品table 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;
/
产品table:
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;
/
在产品中插入语句 table:
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。使用 NVL
或 COALESCE
:
... SET FinalTotal = NVL(FinalTotal,0) + Total
NULL加上一个数字就是NULL。
SELECT NULL + 1 FROM DUAL; -- NULL
SELECT NVL(NULL, 0) + 1 FROM DUAL; -- 1