优化mysql delimiter $$ create procedure pr_Course(in v_couno) begin select *, case when willnum/limitnum>3 then'最受欢迎课程' when willnum/limitnum>=2 and willnum/limitnum<=3 then'受欢迎课程' when willnum/limitnum<1 then'可替换课程' else '选修正常课程' from course where v_couno=couno; end $$ delimiter ;
时间: 2024-03-05 15:51:36 浏览: 63
好的,以下是优化后的 MySQL 存储过程代码:
```mysql
CREATE PROCEDURE pr_Course(IN v_couno INT)
BEGIN
SELECT *, CASE
WHEN willnum / limitnum > 3 THEN '最受欢迎课程'
WHEN willnum / limitnum >= 2 AND willnum / limitnum <= 3 THEN '受欢迎课程'
WHEN willnum / limitnum < 1 THEN '可替换课程'
ELSE '选修正常课程'
END AS popularity
FROM course
WHERE couno = v_couno;
END;
```
以上代码中,我们删除了 DELIMITER 命令,直接使用分号作为语句的结束符。同时,我们也简化了存储过程的代码,将 CASE 语句直接写在了 SELECT 语句中,避免了使用变量和 IF-ELSEIF 结构。
你可以通过调用该存储过程并传入课程编号来获取该课程的受欢迎程度。例如:
```mysql
CALL pr_Course(1);
```
以上代码将会返回课程编号为 1 的课程的详细信息以及受欢迎程度。
相关问题
delimiter // mysql> create procedure proc_stu_test() -> begin -> select count(*) from student -> end //
这是一个 MySQL 存储过程的创建语句。该存储过程名为 `proc_stu_test`,没有输入参数,执行的操作是查询 `student` 表中的记录数,并将结果返回。存储过程的语法如下:
```
CREATE PROCEDURE procedure_name([IN parameter_name data_type[, ...]])
BEGIN
-- 存储过程的操作
END;
```
其中,`procedure_name` 是存储过程的名称,`parameter_name` 是输入参数的名称,`data_type` 是输入参数的数据类型。在这个例子中,存储过程没有输入参数,因此参数列表为空。`BEGIN` 和 `END` 之间是存储过程的操作。在这个例子中,存储过程的操作只是查询 `student` 表中的记录数。
delimiter $$ create procedure mydb6_view.proc01() begin select empno,ename from emp; end $$ delimiter ;
这是一个 MySQL 存储过程,它的作用是查询 emp 表中的员工编号和姓名。下面是该存储过程的代码解释:
- `delimiter $$`:将语句结束符号从分号 `;` 改为双美元符号 `$$`,这样可以在存储过程中使用分号,避免与 SQL 语句中的分号混淆。
- `create procedure mydb6_view.proc01()`:创建一个名为 `mydb6_view.proc01` 的存储过程。
- `begin`:开始存储过程的代码块。
- `select empno,ename from emp;`:查询 emp 表中的员工编号和姓名。
- `end`:结束存储过程的代码块。
- `$$`:结束语句。
最后,`delimiter ;` 将语句结束符号恢复为默认的分号 `;`。
要执行该存储过程,可以使用以下代码:
```
call mydb6_view.proc01();
```
执行该代码后,将会查询 emp 表中的员工编号和姓名,并输出结果。
阅读全文