mysql的存储过程举例_mysql 函数,存储过程举例

关于mysql的函数与存储过程的举例:

/*创建teacher*/

CREATE table teacher(

id INT(4) NOT NULL PRIMARY KEY auto_increment,

num INT(10) not NULL UNIQUE,

tname VARCHAR(20) NOT NULL,

sex VARCHAR(4) not NULL,

birthday DATE,

address VARCHAR(50)

);

/*向表teacher中插入数据*/

insert into teacher(num,tname,sex,birthday,address) VALUES

(1001,'张三','男','1984-11-08','北京市昌平区'),

(1002,'李四','女','1970-01-21','北京市海淀区'),

(1003,'王五','男','1976-10-30','北京市昌平区'),

(1004,'赵六','男','1980-06-05','北京市顺义区');

/*1、创建存储过程tea_pro,其包含3个参数,输入参数teacher_id和type,

输出参数为info,存储过程的作用是根据编号(teacher_id)来查询teacher表中的记录,

如果type的值为1时,将姓名(name)传给输出参数info;当type的值为2时,

将年龄传给输出参数info;如果type为其他值,则返回字符串‘Error’。*/

DELIMITER //

CREATE PROCEDURE tea_pro(in teacher_id INT, in type int , out info CHAR(10))

reads SQL DATA

BEGIN

IF type=1

THEN

(SELECT tname into info FROM teacher where id=teacher_id);

ELSEIF type=2

THEN

SELECT year(now())-year(birthday) INTO info FROM teacher WHERE ID=teacher_id;

ELSE

set info='error';

END if;

END

//

CALL tea_pro(1,1,@name);

SELECT @name as '姓名';

CALL tea_pro(1,2,@age);

SELECT @age as '年龄';

CALL tea_pro(1,4,@age);

SELECT @age as 'Error';

/*2、创建存储函数teacher_info2,有2个参数teacher_id和type。存储函数的作用

根据编号(teacher_id)来查询teacher的记录,如果type值为1时,返回姓名,如果

type为2时,返回年龄,如果type为其他值,返回字符串'Error'*/

DELIMITER //

CREATE FUNCTION teache_info2(teacher_id INT,type INT)

RETURNS char(10)

BEGIN

DECLARE result CHAR(10);

IF type=1

THEN

set result=(SELECT tname FROM teacher where id=teacher_id);

return result;

ELSEIF type=2

THEN

SELECT year(now())-year(birthday) INTO result FROM teacher WHERE ID=teacher_id;

return result;

ELSE

set result='error';

return result;

END if;

END

//

SELECT teache_info2(1,1) as '姓名';

SELECT teache_info2(1,2) as '年龄';

SELECT teache_info2(1,5) as 'Error';

函数与存储过程基本相似,但依然存在区别,编写时请注意:

1、标识符不同。函数的标识符为FUNCTION,过程为:PROCEDURE。

2、函数中有返回值,且必须返回,而过程没有返回值(其实不能这么说,存储过程存在输出值)。

3、两者调用方式不同。

4、函数可以在select语句中直接使用,而过程不能,例如:假设已有函数fun_getAVG() 返回number类型绝对值。那么select fun_getAVG(col_a) from table 这样是可以的。

注意:sql语句中"@"是:局部变量声明,如果没有"@"的字段代表是列名;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值