1.实验目的
掌握数据库存储过程的设计和使用方法。
2.实验内容和要求
存储过程的定义,存储过程运行,存储过程更名,存储过程删除。
3.实验步骤
(1)定义一个存储过程proc1,更新所有订单(含税折扣价)的总价,执行这个存储过程。
源代码:
CREATE PROCEDURE proc1 ()
BEGIN
UPDATE orders
SET totalprice = (
SELECT
SUM(
extendedprice * (1 - discount) * (1 + tax)
)
FROM
lineitem
WHERE
orders.orderkey = lineitem.orderkey
);
END;
CALL proc1 ()
(2)定义一个存储过程 proc2,更新给定订单的(含税折扣价)的总价,执行这个存储过程。
源代码:
CREATE PROCEDURE proc2 (IN okey INT)
BEGIN
UPDATE orders
SET totalprice = (
SELECT
SUM(
extendedprice * (1 - discount) * (1 + tax)
)
FROM
lineitem
WHERE
orders.orderkey = lineitem.orderkey
AND orders.orderkey = okey
);
END;
CALL proc2 (11)
(3)定义一个存储过程 proc3,更新某个顾客的所有订单的(含税折扣价)总价,执行这个存储过程。
源代码:
CREATE PROCEDURE proc3 (IN cname CHAR(25))
BEGIN
DECLARE L_custkey INT;
SELECT
custkey INTO L_custkey
FROM
customer
WHERE
NAME = cname;
UPDATE orders
SET totalprice = (
SELECT
SUM(
extendedprice * (1 - discount) * (1 + tax)
)
FROM
lineitem
WHERE
orders.orderkey = lineitem.orderkey
AND orders.custkey = L_custkey
);
END;
CALL proc3 ('孔珍')
(4)定义一个存储过程 proc4,更新某个顾客的所有订单的(含税折扣价)总价并输出该总价,执行这个存储过程。
源代码:
CREATE PROCEDURE proc4 (
IN cname CHAR (25),
OUT price_total NUMERIC (10, 2)
)
BEGIN
DECLARE L_custkey INT;
SELECT
custkey INTO L_custkey
FROM
customer
WHERE
NAME = cname;
UPDATE orders
SET totalprice = (
SELECT
SUM(
extendedprice * (1 - discount) * (1 + tax)
)
FROM
lineitem
WHERE
orders.orderkey = lineitem.orderkey
AND orders.custkey = L_custkey
);
SELECT
SUM(totalprice) INTO price_total
FROM
orders
WHERE
custkey = L_custkey
GROUP BY custkey;
END;
CALL proc4 ('孔珍' ,@p_total);
SELECT
@p_total;
结果截图:
(5)删除存储过程 proc4。
源代码:
DROP PROCEDURE proc4;