mysql 存储过程

数据库的存储过程在正常的线上应用是不会用到了,至少在我工作的这么些年,很少再遇到存储过程。

但在现实的测试过程中,为了快速修改一些数据,还是需要使用到存储过程。

设置的参数的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]

原文地址:https://www.cnblogs.com/yingchen/p/11827018.html