(8)编写一个存储过程,输入为一日期字符串(格式为yyyy-MM-dd)和制作电影的公司名称,如果该公司的电影上映时间晚于输入中日期字符串的时间,如果其票价小于100,则增加其原票价的20%,如果其票价大于等于100,则增加其原票价的10%。同时按该公司的电影的上映时间从早到晚的顺序分别打印一行字符串“电影名称&票价”。
时间: 2024-03-07 07:48:24 浏览: 42
好的,以下是存储过程的代码:
```mysql
DELIMITER $$
CREATE PROCEDURE update_movie_price(
IN date_str VARCHAR(10),
IN company_name VARCHAR(50)
)
BEGIN
DECLARE movie_id INT;
DECLARE movie_name VARCHAR(100);
DECLARE release_date DATE;
DECLARE ticket_price FLOAT;
DECLARE new_price FLOAT;
SELECT id, name, release_date, ticket_price
INTO movie_id, movie_name, release_date, ticket_price
FROM movies
WHERE company = company_name AND release_date > STR_TO_DATE(date_str, '%Y-%m-%d')
ORDER BY release_date ASC;
WHILE movie_id IS NOT NULL DO
IF ticket_price < 100 THEN
SET new_price = ticket_price * 1.2;
ELSE
SET new_price = ticket_price * 1.1;
END IF;
UPDATE movies SET ticket_price = new_price WHERE id = movie_id;
SELECT CONCAT(movie_name, '&', new_price) AS movie_info;
SELECT id, name, release_date, ticket_price
INTO movie_id, movie_name, release_date, ticket_price
FROM movies
WHERE company = company_name AND release_date > STR_TO_DATE(date_str, '%Y-%m-%d')
ORDER BY release_date ASC;
END WHILE;
END $$
DELIMITER ;
```
解释一下代码:
- `DELIMITER $$`:将语句分隔符设置为 `$$`,这样可以在存储过程中使用分号 `;`。
- `CREATE PROCEDURE`:创建一个存储过程,接收两个输入参数 `date_str` 和 `company_name`。
- `DECLARE`:声明变量。
- `SELECT INTO`:将查询结果赋值给变量。
- `WHILE`:循环查询该公司的电影,直到没有符合条件的电影。
- `IF`:判断电影票价是否小于 100。
- `UPDATE`:更新电影票价。
- `SELECT`:打印电影信息。
- `DELIMITER ;`:将语句分隔符设置回分号 `;`。
使用方法:
调用存储过程,传入日期字符串和制作电影的公司名称。
例如:
```mysql
CALL update_movie_price('2022-01-01', 'ABC制作公司');
```
这个存储过程会查询 ABC 制作公司在 2022 年 1 月 1 日之后上映的电影,并按照上映时间从早到晚的顺序依次更新电影票价,并打印电影名称和新票价。
阅读全文