contNo FROM bs_cont WHERE id = `id` ; -- 分号要加
END
语法: CREATE PROCEDURE sp_name(定义输入输出参数) [ 存储特性 ] BEGIN SQL语句; END
IN 表示输入参数,OUT表示输出参数,INOUT表示既可以输入也可以输出的参数。sp_name为存储过程的名字。
如果此存储过程没有任何输入输出,其实就没什么意义了,但是sp_name()的括号不能省略。
注意:
1. 先定义名称,在定义类型 ( IN `id` int)。
2. 给出参变量赋值要用 into
查看刚才创建的存储过程。
SHOW PROCEDURE STATUS LIKE ‘g%‘;
下面是调用存储过程。对于存储过程提供的临时变量而言,MySQL规定要加上@开头。
#study 是当前数据库名称
CALL study.findCont(1,@contNo);
SELECT @contNo;
1 存储过程
存储函数与存储过程本质上是一样的,都是封装一系列SQL语句,简化调用。我们自己编写的存储函数可以像MySQL函数那样自由的被调用。
2. 存储过程语法
2.1 创建 (类型 1 和类型2)
CREATE FUNCTION getStuNameById(stuId INT) --默认是IN,但是不能写上去。stuId视为输入的临时变量
RETURNS VARCHAR(255) --指明返回值类型
RETURN (SELECT name FROM t_student WHERE id = stuId); // --指明SQL语句,并使用结束标记。注意分号位置
CREATE DEFINER=`vx`@`%` FUNCTION `calInvoiceAmountForRe`(sourceType VARCHAR(20),sourceId BIGINT) RETURNS decimal(12,2)begin
--定义两个变量
declare invocieAmountRe decimal(13,2);declare invocieAmountAr decimal(13,2);--来自于实收的时候:检查sourece_id对应的实收已经开票的金额合计
select sum(a.amount_invoice) from fin_invoice_detail a inner joinfin_invoice bon a.INVOICE_NO =b.INVOICE_NOwhere b.STATUS <> ‘5‘ and b.is_del =‘0‘ and a.type is null
and a.SOURCE_ID = sourceId and a.SOURCE_TYPE =sourceTypegroup by a.SOURCE_TYPE,a.SOURCE_ID intoinvocieAmountRe;--来自于实收的时候:检查sourece_id对应的实收已经开票的金额
select sum(a.amount_invoice) from fin_invoice_detail a inner joinfin_invoice bon a.INVOICE_NO =b.INVOICE_NOwhere b.STATUS <> ‘5‘ and b.is_del =‘0‘ and a.type is null
and a.SOURCE_ID in (select charge_detail_id from fin_received_charge_relate where id = sourceId ) and a.SOURCE_TYPE = ‘AR‘
group by a.SOURCE_TYPE,a.SOURCE_ID intoinvocieAmountAr;return IFNULL(invocieAmountRe,0) +IFNULL(invocieAmountAr,0);end
使用存储函数。
SELECT getStuNameById(1);
注意:
1. 在RETURN 语句后面,有趣的是,分号在SQL语句的外面。如果不加分号,查询结果居然查询出两条记录,很奇怪。
2. 2给出参变量赋值要用 into。
2、存储函数和存储过程的区别
存储函数 存储过程
不能拥有输出参数 可以拥有输出参数
可以直接调用存储函数,不需要call语句需要call语句调用存储过程
必须包含一条return语句 不允许包含return语句
3. 从上述存储函数的写法上来看,存储函数有一定的缺点。首先与存储过程一样,只能返回一条结果记录。另外就是存储函数只能指明一列数据作为结果,而存储过程能够指明多列数据作为结果。
mysql 存储过程与存储函数
标签:str 条件 turn from family function 区别 意义 有趣的