带入参存储过程 sql数据库中怎样调用带参数的存储过程

seosqwseo3个月前 (08-23)测评日记42

一、在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

相关文章

康佳(KONKA)55G5U好不好用

康佳(KONKA)55G5U好不好用

很多小伙伴在关注康佳(KONKA)55G5U怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧。...

海信会议平板电视86英寸会议电视视频会议平板一体机触摸电视电子白板智能商用大屏显示价格多少钱

海信会议平板电视86英寸会议电视视频会议平板一体机触摸电视电子白板智能商用大屏显示价格多少钱

很多小伙伴在关注海信会议平板电视86英寸会议电视视频会议平板一体机触摸电视电子白板智能商用大屏显示怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优...

海信游戏旗舰电视65E35H价格多少钱

海信游戏旗舰电视65E35H价格多少钱

很多小伙伴在关注海信游戏旗舰电视65E35H怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧。...

索尼(SONY)43英寸质量好不好

索尼(SONY)43英寸质量好不好

很多小伙伴在关注索尼(SONY)43英寸怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧。...

爱百分英语点读笔万能通用扫描笔小学初中高中生课本同步幼儿童启蒙绘本书阅读翻译词典全科扫读笔学习机使用感受如何

爱百分英语点读笔万能通用扫描笔小学初中高中生课本同步幼儿童启蒙绘本书阅读翻译词典全科扫读笔学习机使用感受如何

很多小伙伴在关注爱百分英语点读笔万能通用扫描笔小学初中高中生课本同步幼儿童启蒙绘本书阅读翻译词典全科扫读笔学习机怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用...

适马(SIGMA)Art85mm质量测评好不好

适马(SIGMA)Art85mm质量测评好不好

很多小伙伴在关注适马(SIGMA)Art85mm怎么样?质量好不好?使用测评如何?本文综合已购用户的客观使用分享和相应的优惠信息,为大家推荐一款高性价比的产品,一起来看看吧...