存储函数与存储过程一样,是由SQL语句和过程式语句组成的代码片段
存储函数 | 存储过程 |
不能拥有输出参数 | 可以拥有输出参数 |
可以直接调用存储函数,不需要call语句 | 需要call语句调用存储过程 |
必须包含一条return语句 | 不允许包含return语句 |
示例:在数据库中mysql_test中创建一个存储函数,要求该函数能根据给定的客户id号返回客户的性别,如果数据库中没有给定的客户id号,则返回"没有该客户".
用例表:customer(cust_id,cust_sex,cust_name); ->use mysql_test; ->delimiter $$ ->create function fn_name(cid int) //创建一个存储函数,题目要求我们输入id号判断性别,所以是int -> returns char(2) //返回性别,所以char类型 -> deterministic //为了提高where子句的性能加的 ->begin //接下来要写函数体了 -> declare sex char(2); //声明局部变量用来装性别 -> select cust_sex into sex from customer //把这个性别放进局部变量 -> where cust_id = cid; //判断id相符 -> if sex is null then //判断这个局部变量性别对应的属性 -> return(select ‘没有该客户‘); -> else if sex = ‘女‘ then -> return(select "女"); -> else return(select "男"); -> end if; //用来结束else if的语句 -> end if; //用来结束if的语句 ->end $$ //用来结束存储函数
//调用存储函数,举上面的例子
customer表的数据
(1,"男","zhangsan")
(2,"女","wangwu")
(3,"女","lisi")
(4,null,"wowo")
这里我有4条数据
->select fn_name(1)$$
->男 //输出结果
->select fn_name(2)$$
->女 //输出结果
->select fn_name(4)$$
->null //输出结果
->drop function if exists fn_name $$ //指定要删除的存储函数的名称
示例:在数据库mysql_test中创建一个商品订单表orders,该表包含订单号order_id,商品名order_product,商品类型order_product_type,客户id号cust_id,
订购时间order_date,价格order_price,数量order_amount。要求商品订单表orders中的所有订购客户信息均已在表costomers中记录在册 ->use mysql_test ->cretate table orders ->( -> order_Id int not null auto_increment, -> order_product char(50) not null, -> cust_id int not null, -> order_date datetime not null, -> order_price double not null, -> order_amount int not null, -> primary key(order_id), -> foreign key(cust_id) -> references customers(cust_id) -> on delete restrict -> on update restrict ->); //restrict 限制策略 //cascade 级联策略 //set null 置空策略 //no action 不采取实施策略
原文:https://www.cnblogs.com/cheneyboon/p/11432095.html