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 17:33:35 浏览: 141
这段代码是一个 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;有错吗
这个存储过程看起来是正确的,没有明显的语法错误。但是,有一个小问题,就是在WHERE语句中的d_id = d_id,这里的d_id会与存储过程的输入参数d_id发生冲突,因此建议更改为:
```
WHERE doctor.d_id = d_id
```
这样可以明确指定要查询的是doctor表中的d_id列,而不是存储过程的输入参数。
另外,确保在创建存储过程之前,doctor表和work表都已经正确创建,并且在存储过程中使用的列名和表名是正确的。
create definer = root@`%` event update_timestampON on schedule every '30' minute do UPDATE sys_user_location SET timestamp = UNIX_TIMESTAMP() where user_id is not null 这段定时器创建是否存在问题
这个定时器创建语句存在一些问题,应该修改为以下形式:
```
CREATE EVENT update_timestamp
ON SCHEDULE EVERY 30 MINUTE
ON COMPLETION PRESERVE
DO
UPDATE sys_user_location SET timestamp = UNIX_TIMESTAMP() WHERE user_id IS NOT NULL;
```
修改后的语句中,主要做了以下几个修改:
1. `CREATE EVENT`开头,将`EVENT`关键字加上;
2. 增加了`ON COMPLETION PRESERVE`,表示当事件完成时保留它,以便下次再次使用;
3. 将`UPDATE`语句放在`DO`关键字后面,并增加`WHERE`条件,确保只更新`user_id`不为空的记录。
另外,需要注意的是,如果你的MySQL版本较旧,可能不支持事件调度器功能。需要确认你的MySQL版本是否支持事件调度器,可以使用以下命令查询:
```
SELECT @@event_scheduler;
```
如果返回值为`ON`,则表示事件调度器已经启用;如果返回值为`OFF`,则需要使用`SET GLOBAL event_scheduler = ON;`命令启用事件调度器。
阅读全文