请问JDBC中返回结果参数的存储过程{?=call 过程名(?,?,...)}返回的结果如何得到?

kare 2001-08-07 01:19:34
还有一个问题就是下面这个存储过程有是么不对
CREATE PROCEDURE GetFileName
@TableName varchar(20),
@FileName varchar(20) OUTPUT

AS

SELECT @FileName = FileName
FROM @TableName
WHERE Number = ...
RETURN
GO

说是FROM @TableName一行有错,没有定义@TableName?好奇怪!
...全文
359 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhjwjan 2002-04-23
  • 打赏
  • 举报
回复
CREATE PROCEDURE GetFileName
@TableName varchar(20),
@FileName varchar(20) OUTPUT
AS

Declare @sql varchar(128)

Create table #temp (FileName varchar(20))

@sql='insert #temp select Filename from '+@TableName+ ' where Number=...'

Exec (@sql)

select @FileName= FileName from #temp

Drop Table #temp

GO
kare 2001-10-21
  • 打赏
  • 举报
回复
to:jamfang(大雄)
最近有事,现在补上90
czb 2001-10-18
  • 打赏
  • 举报
回复
jamfang(大雄):呵呵,不是拉,我是广西的,和你一样也有一个西,不过你的名字倒和我的一个湖北同学差不多,他叫马志雄 :)
jamfang 2001-10-18
  • 打赏
  • 举报
回复
還有我想問一下上面的'草中寶'是不是我認識的西安的師兄.我是方志雄如果你還記得的話.聯系...
jamfang 2001-10-18
  • 打赏
  • 举报
回复
(得到這個結果的方法有很多種,看你自己的需要了.)
這將會是我最後一次回答你的問題如果你不屢行你的話.
用以下方法可得到:
return exec('Select'+....)
外面可通過"{?=call getFileName(?,..?)}",registerOutParameter(1,java.sql.Type.INTEGER),執行后getString(1)出來就可以了.
kare 2001-10-17
  • 打赏
  • 举报
回复
还有人知道吗?
再加上10分(别嫌少,慢慢来)
czb 2001-10-16
  • 打赏
  • 举报
回复
不好意思,我对SQL Server的存储过程不是很熟悉。
kare 2001-10-16
  • 打赏
  • 举报
回复
to:czb(草中宝)
谢谢你,是我没表达清除,我的意思是在存储过程中如何实现,也就是说exec('Select Field='+@FieldName+' From '+@TableName + ' where....')将查询结果放在Field中,但是如何返回呢?
比如
CREATE PROCEDURE GetName
@Name varchar(20) OUTPUT
AS
SELECT @Name = Name FROM Employee WHERE ID = 1
return
GO
这样就可以将查询结果通过@Name代回
如果写成这样:
CREATE PROCEDURE GetFileName
@TableName varchar(20),
@FileName varchar(20) OUTPUT
AS
declare @FieldName as varchar(20)
declare @FieldName1 as varchar(20)
Select @FieldName = 'FileName'
Select @FieldName1 = ''
exec('Select ' + @FieldName1 + ' = ' + @FieldName + ' From ' + @TableName + ' Where Number = 1')
Select @FileName = @FieldName1
return
GO
则得到的结果是个空串,也就是说前面Select @FieldName1 = ''给@FieldName1赋什么字符串,返回的就是什么字符串
czb 2001-10-16
  • 打赏
  • 举报
回复
不知道SQL Server是怎么弄的,不过一般都是在存储过程执行之前要先注册输出函数,执行之后在用相应的getXXX()取回结果。参见:
call=conn.prepareCall("{ call addperson (?,?,?) }");
call.registerOutParameter(3,java.sql.Types.INTEGER);
call.setString(1, "小路");
call.setString(2, "女");
call.execute();

int id=call.getInt(3);
kare 2001-10-16
  • 打赏
  • 举报
回复
to:jamfang(大雄)
首先非常感谢你还能记着我的这个帖子
exec('Select FieldName='+@FieldName+' From '+@TableName + ' where....')
根据条件执行后结果应是只包含一个字段的一条记录,问题是如何在应用程序中得到这个结果
我的帖子会在你每回一次加20分,先加20
jamfang 2001-10-09
  • 打赏
  • 举报
回复
不好意思呀小李,我不小心把单引号写成双引号了,很久没上来没看见你回复了,sorry.
正确的应该是:
declare @FieldName as varchar(20)
declare @TableName as varchar(20)
Select @FieldName = 'your field names'
Select @TableName = 'your table name'
exec('Select FieldName='+@FieldName+' From '+@TableName + ' where....')
kare 2001-09-22
  • 打赏
  • 举报
回复
exec('Select '+@FileName+"=FileName From "+@TableName+" Where Number=...')
中为什么不能有返回参数@FileName
kare 2001-09-19
  • 打赏
  • 举报
回复
to jamfang(大雄) :
存储过程中提示
exec('Select '+@FileName+"=FileName From "+@TableName+" Where Number=...');
在第一个=附近有错,如果去掉@FileName+就正确了,即
exec('Select FileName From "+@TableName+" Where Number=...');
但查询的结果无法返回,如何解决,分不够可以在加,只要你开个口
jamfang 2001-08-20
  • 打赏
  • 举报
回复
要组合动态的SQL需要用exec('your SQL Statement'),所以你的解决方法应该为:
exec('Select '+@FileName+"=FileName From "+@TableName+" Where Number=...');
kare 2001-08-09
  • 打赏
  • 举报
回复
可我的情况有电特殊,在执行存储过程时表名未定,而且该数据库中具有相同结构的表数目是动态改变的,表名也是用户自定义的无规律可训
clarain 2001-08-09
  • 打赏
  • 举报
回复
FROM @TableName
from后面的表明应该不可以使用变量吧!
kare 2001-08-09
  • 打赏
  • 举报
回复
高手去那拉
kare 2001-08-08
  • 打赏
  • 举报
回复
没人知道吗

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧