仓库(编号,保管员编号,面积) 保管员(编号,姓名,年龄,电话、月薪) 商品(编号,品名,仓库编号、数量,单价) 根据上面基本表的信息定义一个存储过程,完成下面功能: 入口参数:仓库编号 1 显示仓库信息 2 如果没有商品存放,删除该记录 3 如果面积低于100平米,设为100。create procedure ManageMedical @id int as if @id not in(select 仓库编号 from 仓库) begin print('没有该仓库') return end select * from 仓库 where 仓库编号 = @id declare @count int select @count = COUNT(*) from 商品 where 品名 = @id if(@count = 0) update 商品 set 品名=null from 商品 where 品名= @id; else begin declare @price money select @price = 面积 from 仓库 where 仓库编号 = @id if (@price <100) update 仓库 set 面积 = 10000 where 仓库编号 = @id end go如何编写测试部分代码
时间: 2024-04-04 09:31:35 浏览: 148
我们可以编写以下测试部分代码来测试存储过程的功能:
--测试仓库不存在的情况
EXEC ManageMedical 100
--测试仓库存在的情况
EXEC ManageMedical 1
--测试仓库存在但没有商品存放的情况
EXEC ManageMedical 2
--测试仓库存在且有商品存放的情况
EXEC ManageMedical 3
在测试部分代码中,我们通过传入不同的仓库编号参数来测试不同情况下存储过程的功能。我们可以根据存储过程的输出结果来判断存储过程是否正常运行。
相关问题
仓库(编号,保管员编号,面积) 保管员(编号,姓名,年龄,电话、月薪) 商品(编号,品名,仓库编号、数量,单价) 建立仓库的delete 触发器,只有当此仓库没有商品时才可删除。
可以使用以下 SQL 语句创建该触发器:
```
CREATE TRIGGER delete_warehouse
BEFORE DELETE ON 仓库
FOR EACH ROW
BEGIN
DECLARE count INT;
SELECT COUNT(*) INTO count FROM 商品 WHERE 商品.仓库编号 = OLD.编号;
IF count > 0 THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '无法删除该仓库,因为仍有商品存放在其中';
END IF;
END
```
该触发器会在删除仓库之前检查该仓库是否还有商品存放在其中,如果有,则会抛出一个错误,阻止删除操作。否则,删除操作会继续执行。
仓库(编号,保管员编号,面积) 保管员(编号,姓名,年龄,电话、月薪)商品(编号,品名,仓库编号、数量,单价)1根据上面基本表的信息定义视图显示每个仓库保管员姓名、保管商品价值总额 2 观察基本表数据变化时,视图中数据的变化。3利用视图,查询保管商品价值金额最高的保管员。
对于第一个问题,可以使用以下SQL语句定义视图:
```
CREATE VIEW warehouse_info AS
SELECT w.warehouse_id, b.name, SUM(c.quantity * c.unit_price) AS total_value
FROM warehouse w, caretaker b, commodity c
WHERE w.caretaker_id = b.caretaker_id AND w.warehouse_id = c.warehouse_id
GROUP BY w.warehouse_id, b.name;
```
这个视图包含了每个仓库的保管员姓名和保管商品总价值。它连接了仓库、保管员和商品表,并使用了SUM函数计算商品总价值。
对于第二个问题,当基本表数据变化时,视图中的数据也会随之变化。例如,如果添加了一些商品记录,那么视图中对应仓库的商品总价值也会增加。
对于第三个问题,可以使用以下SQL语句查询保管商品价值金额最高的保管员:
```
SELECT name
FROM warehouse_info
WHERE total_value = (SELECT MAX(total_value) FROM warehouse_info);
```
这个查询使用子查询找到所有仓库中商品价值最高的值,然后在视图中查找对应的保管员姓名。
阅读全文