获取不到存储过程返回结果
‘壹’ 如果存储过程返回多个结果集,怎么取结果
1、返回结果集
这是客户端应用程序返回结果的最通用的方法。结果集是通过使用SELECT语句选择数据产生的。结果集可以从永久表、临时表或局部变量中产生。将结果返回到另一个存储过程不是一种有效的方法。存储过程不能访问另一个存储过程建立的结果集。
例如从永久表中返回结果集:
USE pubs
GO
CREATE PROCEDURE ap_CreateResultFromPermtable
AS
SELECT au_iname FROM authors
例如从局部变量中创建结果集:
USE pubs
GO
CREATE PROCEDURE ap_CreateResultFromVariable
AS
DECLARE @au_iname char(20)
SELECT @au_iname = au_iname FROM authors
WHERE au_id = ‘172-32-1176’
SELECT @au_id
GO
‘贰’ java调用oracle存储过程无法获得正确的返回值,每次都是0
你通过JDBC这种方式调用存储过程,应该使用 CallableStatement 类, CallableStatement cs=conn.prepareCall(str);
补充一句,避免你在执行有错,
cs.excuse();这个方法为执行,然后在获取输出参数。另外写输出参数的类型时,直Types.类型即可,不用带包。
‘叁’ 执行存储过程没有返回任何结果,我也设置了输出函数,求各位帮忙解答!
那是因为你的@avg_Grade没有接收到值,是空的
先把查询语句单提出来执行 测试是否有值
‘肆’ 如何获取存储过程返回值
1.OUPUT参数返回值
CREATE PROCEDURE [dbo].[nb_order_insert](
@o_buyerid int ,
@o_id bigint OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN
INSERT INTO [Order](o_buyerid )
VALUES (@o_buyerid )
SET @o_id = @@IDENTITY
END
END
2.存储过程中获得方法:
DECLARE @o_buyerid int
DECLARE @o_id bigint
DECLARE @result bit
EXEC @result = [nb_order_insert] @o_buyerid ,o_id output
3.SELECT 数据集返回值
CREATE PROCEDURE [dbo].[nb_order_select](
@o_id int
)
AS
BEGIN
SET NOCOUNT ON;
SELECT o_id,o_buyerid FROM [Order]
WHERE o_id = @o_id
GO
‘伍’ 在 sql select 语句中 如何获取 存储过程的返回值
SQL Server中存储过程的返回值不是通过return语句返回的(return语句是在用户自定义函数中使用的),而是通过存储过程的参数来返回,在定义存储过程的参数时使用关键字output来指定此参数是返回值。
而在调用存储过程时,也必须使用关键字给接收返回值的变量,这样才能在调用时获得存储过程的返回值。
示例:
createproceredbo.pr_add@aint,@bint,@cintoutput
as
set@c=@a+@b
go
调用:
declare@vint
executedbo.pr_add1,2,@voutput
select@v
‘陆’ SQL 从触发器获得的值发送到存储过程中获取不到结果集
你可以在触发器上调用存储过程,
触发器中有两个临时表inserted 和deleted ,这两个表的表结构和创建触发器的表是一样的,
inserted表存的是当前插入或更新后的值,
deleted表存的是当前删除或修改前的值.
你可以利用以上两个临时表的值来获得你要的参数值,然后调用时传入存储过程
另外你也可以直接在触发器中操作,不用存储过程。
‘柒’ CallableStatement为什么不能取出存储过程的返回值
Connectionconn=null;
CallableStatementstmt=null;
ResultSetrs=null;try{//获取连接
conn=JdbcUtil.getConnection();//准备sql
Stringsql="CALLpro_findById2(?,?)";//第一个?是输入参数,第二个?是输出参数
//预编译
stmt=conn.prepareCall(sql);
//设置输入参数
stmt.setInt(1,6);//设置输出参数(注册输出参数)
/**
*参数一:参数位置
*参数二:存储过程中的输出参数的jdbc类型VARCHAR(20)*/
stmt.registerOutParameter(2,java.sql.Types.VARCHAR);
//发送参数,执行
stmt.executeQuery();//结果不是返回到结果集中,而是返回到输出参数中
//得到输出参数的值
/**
*索引值:预编译sql中的输出参数的位置*/
Stringresult=stmt.getString(2);//getXX方法专门用于获取存储过程中的输出参数
System.out.println(result);
}catch(Exceptione){
e.printStackTrace();thrownewRuntimeException(e);
}finally{
JdbcUtil.close(conn,stmt,rs);
}
使用executeQuery()