导读:mysql 自定义存储过程和触发器--存储过程示范DROP PROCEDURE IF EXISTS PRO_TEST;CREATE PROCEDURE PRO_TEST(IN NUM_IN INT,OUT ...
mysql 自定义存储过程和触发器
DROP
PROCEDURE
IF EXISTS PRO_TEST;
CREATE
PROCEDURE
PRO_TEST(
IN
NUM_IN
INT
,
OUT
NUM_OUT
INT
,INOUT NUM_INOUT)
BEGIN
//DO ANYTHING YOU WANT
END
;
参数解释:
in
: 就是输入参数,输入参数是会被传入到存储过程作为参数使用,改变它的值将不会改变其原本值,相当于是值传递
out
: 此为输出参数,在存储过程中为给其值时,哪怕之前传入值,其值也只是
NULL
,相当于是在存储过程中新建一个值并付给
out
参数并输出
inout:此为输入输出参数,可以理解为前两者之和,最为简单的就是理解为按照对象传递
在命令行中如何调用:
SET
@NM_IN=1,@NM_OUT=2,@NM_INOUT=3;
call PROC_TEST(@NM_IN,@NM_OUT,@NM_INOUT);
在java中如何调用:
想办法得到
connection
,在hibernate中为getSession().
connection
();
使用Java.Sql.CallableStatemet call=
connection
().prepareStatement(
"call PROC_TEST(1,2,3)"
);
call.executeQuery()将返回ResultSet对象,call.executeUpdate()将会返回受影响的行数。
触发器按照触发类型可分为:
INSERT
,
UPDATE
,
DELETE
触发器,
按照触发时间可分为:BEFORE,
AFTER
,
按照内容新旧可分为:OLD,NEW,其中删除操作只有OLD,新增操作只有NEW,修改操作两者皆有
eg:没修改
user
表一次,就往user_back表插入修改之前和修改之后的数据:
CREATE
TRIGGER
TRI_UPGRADE_USER BEFORE
UPDATE
ON
USER
FOR
EACH ROW
BEGIN
INSERT
INTO
USER_BACK(USERNAME,USERPWD)
VALUES
(OLD.USERNAME,OLD.USERPWD);
INSERT
INTO
USER_BACK(USERNAME,USERPWD)
VALUES
(NEW.USERNAME,NEW.USERPWD);
END
;
这样就搞定了