今天是碰巧老师布置了一道作业,要求创建一个简单的存储过程来实现不同的五级制与百分制的成绩转换
等级成绩 | 分数区间 |
---|---|
A | >90 |
B | 80-89 |
C | 70-79 |
D | 60-69 |
E | <60 |
要求一:使用IF嵌套创建proc1存储过程
要求二:使用case 语句创建proc2存储过程
注:等级制成绩由参数S (定位长度1)
首先我们先看题目 将一个五级制成绩转换成相对应的分数区间 那么就是我们需要创建一个简单的存储过程 我们输入不同的等级 则存储过程输出不同的内容 比如输入A 则存储过程输出 '>90' (IN a VARCHAR(1) ) IN - 是默认模式。在存储过程中定义IN参数时,调用程序必须将参数传递给存储过程。 另外,IN参数的值被保护。这意味着即使在存储过程中更改了IN参数的值, 在存储过程结束后仍保留其原始值。换句话说,存储过程只使用IN参数的副本。 OUT - 可以在存储过程中更改OUT参数的值, 并将其更改后新值传递回调用程序。请注意, 存储过程在启动时无法访问OUT参数的初始值。 INOUT - INOUT参数是IN和OUT参数的组合。 这意味着调用程序可以传递参数, 并且存储过程可以修改INOUT参数并将新值传递回调用程序。
-- 首先这个存储过程我们需要定义一个参数 其次就这个参数要求长度为 1 -- create 创建 or 或者 replace 替代 PROCEDURE 一个存储过程 proc2 存储过程的名字 (IN(模式详细请看上方) s VARCHAR(1) (传递进存储过程参数类型和长度限制) ) begin 开始 。。。。。。(存储过程内容) end;(结束) CREATE PROCEDURE proc1 ( IN s VARCHAR ( 1 ) ) BEGIN SELECT IF ( s = 'A', '>90', IF ( s = 'B', '80--89', IF ( s = 'C', '70--79', IF ( s = 'D', '60--69', IF ( s = 'E', '<60', '请输入正确的等级!' ))))) AS '结果' FROM DUAL; END
CREATE PROCEDURE proc2 ( IN s VARCHAR ( 1 ) ) BEGIN SELECT CASE WHEN s = 'A' THEN '>90' WHEN s = 'B' THEN '80--89' WHEN s = 'C' THEN '70--79' WHEN s = 'D' THEN '60--69' WHEN s = 'E' THEN '<60' END AS '结果' FROM DUAL; END