数据库的存储过程在正常的线上应用是不会用到了,至少在我工作的这么些年,很少再遇到存储过程。
但在现实的测试过程中,为了快速修改一些数据,还是需要使用到存储过程。
设置的参数的IN, OUT, INOUT
IN 表示调用者向过程传入值, OUT 表示过程向调用者传出值, INOUT 前两者的结合
create procedure in_param(in p_in int)
begin
select p_in;
set p_in = 2 ;
select p_in;
end
set @p_in = 1;
call in_param(@p_in)
declare 定义变量,需要在存储过程中开始
DECLARE l_int int unsingned default 3000;
set @y = 'good bye'
自己在实际测试过程中,为了快速修改数据:
# 修改订单、订单还款计划的起息日,止息日,还款时间,将所有的时间往前推 @days 天, @order_id修改具体的订单;
drop PROCEDURE if EXISTS change_date;
CREATE PROCEDURE change_date()
begin
set @days = 30;
set @order_id = 329221048420433920;
UPDATE inve**nt.order_**ord set s**e = @days where order_id = @order_id;
UPDATE inve**nt.order_**ord set fin**ype = @days where order_id = @order_id;
UPDATE inv**nt.order_**ord set **_time = **_time - @days*86400000, start_**_date = start_**t_date - @days*86400000, end_**_date = end_**_date - @days*86400000
, repa**_date = repa**_date - @days*86400000 , mo**_time = mo**_time - @days*86400000 where order_id =@order_id ;
UPDATE inv**nt.order_**ent set start_**_date = start_**_date - @days*86400000 , end_**date = end_**t_date - @days*86400000,
**_date = **_date - @days*86400000 , **_time =**_time - @days*86400000, **_time = **_time - @days*86400000 where order_id = @order_id ;
COMMIT;
end;
调用:
CALL change_date();
有时候在进行一些循环操作数据的时候也是可以使用到存储过程的。
mysql 存储过程:https://www.runoob.com/w3cnote/mysql-stored-procedure.html
CREATE [DEFINER = { user | CURRENT_USER }] PROCEDUREsp_name([proc_parameter[,...]]) [characteristic ...] routine_bodyproc_parameter: [ IN | OUT | INOUT ] param_nametypecharacteristic: COMMENT'string' | LANGUAGESQL | [NOT] DETERMINISTIC | { CONTAINSSQL | NOSQL | READSSQLDATA | MODIFIESSQLDATA } | SQLSECURITY { DEFINER | INVOKER } routine_body: ValidSQLroutinestatement [begin_label:] BEGIN [statement_list] …… END [end_label]