带入参存储过程 sql数据库中怎样调用带参数的存储过程
一、在J**A中怎么调用带参数的存储过程
JDBC调用存储过程: CallableStatement\x0d\x0a在Java里面调用存储过程,写法那是相当的固定:\x0d\x0aClass.forName(....\x0d\x0aConnection conn= DriverManager.getConnection(....\x0d\x0a/**\x0d\x0a*p是要调用的存储过程的名字,存储过程的4个参数,用4个?号占位符代替\x0d\x0a*其余地方写法固定\x0d\x0a*/\x0d\x0aCallableStatement cstmt= conn.prepareCall("{call p(?,?,?,?)}");\x0d\x0a/**\x0d\x0a*告诉JDBC,这些个参数,哪些是输出参数,输出参数的类型用java.sql.Types来指定\x0d\x0a*下面的意思是,第3个?和第4个?是输出参数,类型是INTEGER的\x0d\x0a*Types后面具体写什么类型,得看你的存储过程参数怎么定义的\x0d\x0a*/\x0d\x0acstmt.registerOutParameter(3, Types.INTEGER);\x0d\x0acstmt.registerOutParameter(4, Types.INTEGER);\x0d\x0a/**\x0d\x0a*在我这里第1个?和第2个?是输入参数,第3个是输出参数,第4个既输入又输出\x0d\x0a*下面是设置他们的值,第一个设为3,第二个设为4,第4个设置为5\x0d\x0a*没设第3个,因为它是输出参数\x0d\x0a*/\x0d\x0acstmt.setInt(1, 3);\x0d\x0acstmt.setInt(2, 4);\x0d\x0acstmt.setInt(4, 5);\x0d\x0a//执行\x0d\x0acstmt.execute();\x0d\x0a//把第3个参数的值当成int类型拿出来\x0d\x0aint three= cstmt.getInt(3);\x0d\x0aSystem.out.println(three);\x0d\x0a//把第4个参数的值当成int类型拿出来\x0d\x0aint four= cstmt.getInt(4);\x0d\x0aSystem.out.println(four);\x0d\x0a//用完别忘给人家关了,后开的先关\x0d\x0acstmt.close();\x0d\x0aconn.close();\x0d\x0a\x0d\x0aJDBC调用存储过程,掌握这一个程序足够了.\x0d\x0a以下是上面程序使用的存储过程的代码,我用的是Oracle数据库,不过不论是什么数据库,对于你的程序,JDBC这一端写法都是一样的.\x0d\x0a\x0d\x0acreate or replace procedure p\x0d\x0a(v_a in number,v_b number,v_ret out number,v_temp in out number)\x0d\x0ais\x0d\x0abegin\x0d\x0aif(v_a> v_b) then\x0d\x0av_ret:= v_a;\x0d\x0aelse\x0d\x0av_ret:= v_b;\x0d\x0aend if;\x0d\x0av_temp:= v_temp+ 1;\x0d\x0aend;
二、sql数据库中怎样调用带参数的存储过程
在sql server中执行带参数的存储过程
exec+空格+存储过程名+空格+参数
多个参数的话用逗号分隔传出参数要加output
例如:
exec P_GetIntegratedFluxOneMoment@StartTableName,@ColName,@StartTime,@StartValue output
其中@StartTableName,@ColName,@StartTime,@StartValue都是前面已经定义好的变量传入参数也可以不用变量直接写值也行
程序中调用的话看你用什么语言了各个语言的调用方法不一样
三、存储过程参数输入和输出参数有什么作用
无论是输入的参数还是输出的参数,在此过程中都视为一个参数,所以一般情况下对应你定义的参数类型和个数带入,便可调用。
存储过程后面的是参数列表,其实存储过程就是个方法,通过传递参数来指导方法完成。输出参数相当于返回值,会带output关键字。
其它参数要提前赋值,而output不需要提前赋值,只需要提供一个变量,在存储过程执行完的时候,output类型的变量值就会修改,获得返回值,只能通过这个方法获得返回值,而不能像函数一样直接返回结果。因为存储过程是没有返回值的。
扩展资料:
[内定值]相当于在建立数据库时设定一个字段的默认值,这里是为这个参数设定默认值。[OUTPUT]是用来指定该参数是既有输入又有输出值的,也就是在调用了这个存储过程时,如果所指定的参数值是需要输入的参数,同时也需要在结果中输出的,则该项必须为OUTPUT,而如果只是做输出参数用,可以用CURSOR,同时在使用该参数时,必须指定VARYING和OUTPUT这两个语句。
参考资料来源:百度百科-存储过程
四、SqlServer带参存储过程的调用
CREATE PROCEDURE pagination
@tblName varchar(255),--表名
@strGetFields varchar(1000)='*',--需要返回的列
@fldName varchar(255)='',--排序的字段名
@PageSize int= 20,--页尺寸
@PageIndex int= 1,--页码
@doCount **t= 0,--返回记录总数,非 0值则返回
@OrderType **t= 0,--设置排序类型,非 0值则降序
@strWhere varchar(1500)=''--查询条件(注意:不要加 where)
AS begin
declare@strSQL varchar(5000)--主语句
declare@strTmp varchar(110)--临时变量
declare@strOrder varchar(400)--排序类型
if@doCount!= 0
set@strSQL= case@strWhere when''
then'select count(*) as Total from ['+@tblName+']'
else'select count(*) as Total from ['+@tblName+'] where'+@strWhere
end
--以上代码的意思是如果@doCount传递过来的不是0,就执行总数统计。以下的所有代码都是@doCount为0的情况:
else
begin
set@strTmp= case@OrderType when 0
then'>(select max'
else'<(select min'
end
set@strOrder= case@OrderType when 0
then' order by ['+@fldName+'] asc'
else' order by ['+@fldName+'] desc'
end
if@PageIndex= 1
set@strSQL= case@strWhere when''
then'select top'+ str(@PageSize)+''+@strGetFields+' from ['+@tblName+']'+@strOrder
else'select top'+ str(@PageSize)+''+@strGetFields+' from ['+@tblName+'] where'+@strWhere+''+@strOrder
end--如果是第一页就执行以上代码,这样会加快执行速度
else
begin--以下代码赋予了@strSQL以真正执行的SQL代码
set@strSQL='select top'+ str(@PageSize)+''+@strGetFields+' from ['
+@tblName+'] where ['+@fldName+']'+@strTmp+'(['+@fldName+'])
from(select top'+ str((@PageIndex-1)*@PageSize)+' ['+@fldName+']
from ['+@tblName+']'+@strOrder+') as tblTmp)'+@strOrder
if@strWhere!=''
set@strSQL='select top'+ str(@PageSize)+''+@strGetFields+' from ['
+@tblName+'] where ['+@fldName+']'+@strTmp+'(['
+@fldName+']) from(select top'+ str((@PageIndex-1)*@PageSize)+' ['
+@fldName+'] from ['+@tblName+'] where'+@strWhere+''
+@strOrder+') as tblTmp) and'+@strWhere+''+@strOrder
end
end
end
GO