函数+存储过程

1.函数

自定义函数不能与内置函数重名,函数必须有返回值,且只能返回一个值

定义函数:

delimiter \\
create function ad(i1 int,i2 int) returns int
begin
declare sum int default 0;
set sum = i1+i2;
return(sum);
end \\

查看函数返回值(调用函数)

select ad(1,2);

sql自定义函数作用极其有限,由于只能返回一个值,在函数内不能使用select * 等sql语句,除非配合聚集函数sum,avg等使函数返回一个值:

DELIMITER \\
CREATE FUNCTION fun_sumscores2 ( in_class VARCHAR ( 10 ), in_cno VARCHAR ( 10 ) ) RETURNS INT BEGIN
	DECLARE
		c INT;
	SELECT
		sum( score ) 
	FROM
		score 
	WHERE
		cno = in_cno 
		AND sno LIKE CONCAT( in_class, '0_' ) INTO c;
	RETURN c;
	
END \\

所以很多功能都由存储过程实现

存储过程

存储过程的参数必须指定类型:
1.in: 输入类型,在存储过程内可以调用
2.out:输出类型,存储过程内不可调用,可以在存储过程里修改其值,一般用于表示存储过程的执行结果
3.inout:上面两种类型的综合

存储过程没有返回值,输出参数可以发挥返回值的作用

delimiter //
create procedure p1(in i1 varchar(10),out i2 int)
begin
set i2 = 100;
select * from js where Tno = i1;
end //

存储过程的使用

1.定义全局变量

set @i = 1; 

2.调用存储过程

call p1('Too1', @i);

3.打印输出参数,

select @i;

支持事务的存储过程

delimiter //
create procedure p2(
	out p_return_code tinyint
)
begin
declare exit handler for sqlexception
    begin
	-- ERROR
	set p_return_code = 1;
	rollback;
    end;
    start TRANSACTION;
	delete from tb1;
	insert into tb2(name) values('赵铁柱');
    commit;
	
    -- success
    set p_return_code = 2;
end //
posted @ 2019-12-04 16:52  tianqibucuo  阅读(313)  评论(0)    收藏  举报