任务描述
本关任务: 该实验是针对数据表jdxx,该数据表有四个字段,分别是省份(sf)、城市(cs)、区县(qxmc)、街道(name)。 例如,查询天心区(qxmc)的所有字段的值结果如图所示
任务要求
建立存储过程 dqxx(in city varchar(10),in district varchar(10)) 输入城市city和区县district的名称,显示乡x、镇z和街道jd、其他的个数 提示:即name字段含有乡、镇、街道及不包含上述选项的个数
调用过程 以长沙市和开福区为参数,调用dqxx过程 以厦门市和同安区为参数,调用dqxx过程
例如,以长沙市和岳麓区为参数,调用过程显示结果如下
乡 街道 镇 其他
1 9 1 0
相关知识
建立存储过程
命令格式:
1. CREATE PROCEDURE sp_name ( [proc_parameter] )
2. BEGIN
3. 过程体
4. END
设置语句结束符
注意:
DELIMITER //
在过程体前面使用DELIMITER 符号命令将其他符号(不是分号)作为语句结束符,从而使服务器可以完整地处理过程体中所有的sql语句。
DELIMITER ; 在过程结束后将语句结束符变为;
参数列表
([in|out|inout proc_name type][,in|out|inout proc_name type]) 存储过程可以没有参数或多个参数,多个参数之间用逗号分隔,
IN输入参数,使数据可以传递给存储过程 。OUT输出参数,用于需要返回结果。 INOUT输入输出参数,既可以充当输入参数也可以充当输出参数。
声明局部变量
DECLARE 局部变量名 类型 [default 默认值] 过程体中使用的局部变量,必须在存储过程的开头处声明
显示表达式的值
SELECT 表达式 [as 列名] 计算并显示表达式的值
use province;
#代码开始
#定义过程
delimiter $$
create procedure dqxx(in city varchar(10),in district varchar(10)) #创建存储过程
begin #创建dqxx过程
select
count(case when name like '%乡' then 1 else null end) as '乡',
count(case when name like '%街道' then 1 else null end) as '街道',
count(case when name like '%镇' then 1 else null end) as '镇',
count(case when name not like '%乡' and name not like '%街道' and name not like '%镇' then 1 else null end ) as '其他'
from jdxx
where cs=city and qxmc=district;
end $$
#调用过程
call dqxx('长沙市','开福区')$$
call dqxx('厦门市','同安区')$$
delimiter ;
#代码结束
感觉存储过程和语言中的函数一样,创建之后再调用,分为传参和不传参,在结构体中你只需调用它,其他的交给存储过程内部处理,和java里面构造的方法很相似。你想实现什么功能,呈现什么结果都是在存储过程中体现的。