存储过程
IN,OUT,INOUT三种参数
IN:指定入参,不可返回,
OUT:指定出参,不可返回
INOUT,:调用时被指定,可修改,可返回
无参,无返回值 存储过程
CREATE PROCEDURE name()
BEGIN
SELECT * FROM TABLE;
END
有入参存储过程
CREATE PROCEDURE name(IN _username VARCHAR(30),IN _AGE INT)
BEGIN
SELECT * FROM TABLE WHERE USERNAME = _username AND AGE = _age;
END
有入参,有出参 存储过程
CREATE PROCEDURE name(IN _age INT, OUT _username VARCHAR(30))
BEGIN
SET _username = (SELECT USERNAME FROM TABLE WHERE AGE = _age);
SELECT _username;
END
数据库中执行:
可通过@定义入参.
无参 存储过程 的执行:
call name();
有入参 存储过程的执行:
call name(‘张三’,20);
或者
set @username = ‘张三’; –注意定义类型
set @age = 20;
call name(@username.@age);
有出参 存储过程的执行:
set @age = 20;
set @username = ”;–定义出参类型,赋值随意.此条可写可不写
call (@age,@username);
select @username;
@定义的参数,只有在BENGIN和END之间有效
JAVA代码中执行
无参存储过程:
String sql = “call name()”;
其他和普通sql执行一样.
有入参存储过程:
String sql = “call name(?,?)”;
其他和普通sql执行一样.
有出入参存储过程:
String sql = “call name(?,?)”;
为占位符赋值时,出参的赋值在最后.
PS:
CallableStatement call = conn.prepareCall(sql);
call.setInt(1,20);//正常赋值
call.setString(2,Type.String);//指定出参类型
call.execute();
String returnmsg = call.getString(2);//指定位置,此为返回的username
删除存储过程
DROP PROCEDURE ID EXISTS name;
//如果此存储过程存在,删除.