实验4.5 第1关:建立和调用存储过程(不带输出参数的存储过程)

任务描述

本关任务: 该实验是针对数据表jdxx,该数据表有四个字段,分别是省份(sf)、城市(cs)、区县(qxmc)、街道(name)。 例如,查询天心区(qxmc)的所有字段的值结果如图所示

实验4.5 第1关:建立和调用存储过程(不带输出参数的存储过程)_第1张图片

任务要求

建立存储过程 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里面构造的方法很相似。你想实现什么功能,呈现什么结果都是在存储过程中体现的。 

你可能感兴趣的:(mysql,数据库,sql)