函数+存储过程
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 //

浙公网安备 33010602011771号