CREATE DEFINER=`root`@`localhost` PROCEDURE `dj_update`( IN c_name CHAR ( 8 ), IN b_name CHAR ( 20 )) BEGIN DECLARE bh CHAR ( 20 ); DECLARE sfz CHAR ( 18 ); DECLARE sl TINYINT; SELECT 身份证号 INTO sfz FROM members WHERE 会员姓名 = c_name; SELECT 图书编号 INTO bh FROM Book WHERE 书名 = b_name; SELECT 订购册数 INTO sl FROM sell WHERE 身份证号 = sfz AND 图书编号 = bh; IF sl >= 5 AND sl <= 10 THEN UPDATE sell SET 订购单价 =订购单价* 0.9 WHERE 身份证号 = sfz AND 图书编号 = bh; ELSE IF sl > 10 THEN UPDATE Sell SET 订购单价 =订购单价* 0.8 WHERE 身份证号 = sfz AND 图书编号 = bh; END IF; END IF; END
时间: 2024-02-14 12:33:35 浏览: 17
这段代码是一个 MySQL 存储过程,名为 `dj_update`,它包含以下内容:
1. 声明了三个变量 `bh`、`sfz` 和 `sl`,它们的数据类型分别为 `CHAR(20)`、`CHAR(18)` 和 `TINYINT`。
2. 通过 `SELECT` 语句获取了会员姓名为 `c_name` 的会员的身份证号,并将结果存储在变量 `sfz` 中。
3. 通过 `SELECT` 语句获取了书名为 `b_name` 的图书的图书编号,并将结果存储在变量 `bh` 中。
4. 通过 `SELECT` 语句获取了会员身份证号为 `sfz`、图书编号为 `bh` 的销售记录的订购册数,并将结果存储在变量 `sl` 中。
5. 根据订购册数的不同,使用不同的折扣计算方式更新销售记录中的订购单价。如果订购册数在 5-10 之间,则打 9 折;如果订购册数大于 10,则打 8 折。
如果您有任何问题或需要进一步解释,请随时提出。
相关问题
CREATE DEFINER=root@localhost PROCEDURE doctor_schedule(IN d_id INT) BEGIN SELECT doctor.d_name, work.work_start, work.work_end,work.work_state FROM doctor JOIN work ON doctor.d_id = work.d_id WHERE d_id = d_id;怎么调用
您可以使用CALL语句来调用该存储过程,语法如下:
```
CALL doctor_schedule(参数);
```
其中,参数为整型值,用于指定医生的ID。例如,如果要获取医生ID为1的医生的工作安排,可以执行以下语句:
```
CALL doctor_schedule(1);
```
执行后,将返回医生名称,工作开始时间,工作结束时间和工作状态的结果集。
DELIMITER ;; CREATE DEFINER='root@'localhost’ PROCEDURE update_reader_password'(in reader_name_in varchar(20), in password in varchar(35))begin update readers set password = password in where binary reader name = reader name in; end ;; DELIMITER ;
这是一段用于更新读者密码的存储过程的代码。它接受两个输入参数:读者姓名和新的密码。其中,DEFINER='root@'localhost' 表示这个存储过程是由 root 用户在本地主机上创建的。
存储过程的主体部分只包含了一个 SQL 语句,用于更新 readers 表中对应读者的密码。这个 SQL 语句使用了 WHERE 子句来指定要更新的记录,其中 binary reader name = reader name in 表示要匹配读者姓名,注意这里也存在语法错误,应该是 reader_name_in。
另外,在这个 SQL 语句中,使用了输入参数 password,它的值被设置为 password in。这是为了避免与 MySQL 中的保留关键字 password 冲突,使用了一个后缀“_in”。
需要注意的是,这段代码中存在一些语法错误,例如 DELIMITER 后面的分隔符应该是两个分号,而不是一个。此外,存储过程的结束标记也应该是两个分号,而不是一个。最后,SQL 语句中的 reader name 和 password 也应该使用下划线连接。