如何在java中获取存储过程参数的默认值

问题描述:

我需要获取分配给存储过程参数的默认值。如何在java中获取存储过程参数的默认值

我可以使用DatabaseMetaData.getProcedureColumns获取存储过程参数的所有细节,但我没有找到任何方法来获取过程的默认值。

例如,如果我有下面的存储过程

create procedure st_test (
@param1 varchar(10), 
@param2 varchar(4000), 
@param3 varchar(20) = 'SOMEVALUE', 
@param4 varchar(30) = 'OTHERVALUE' 
@param5 varchar(4000) = NULL 
) 

然后我需要获得参数3的默认值,param4 & param5即 'someValue中', 'OTHERVALUE' & NULL

感谢

原则上,您应该能够使用DatabaseMetaData.getProcedureColumns(),字段COLUMN_DEF检索此值。然而,并不是所有的驱动程序都支持这一点。

+0

我试过COLUMN_DEF字段,你说得对,不是所有的驱动都支持这个。我使用sybase jconnect驱动程序,它不支持这个字段:( 我想我需要使用sybase特定的数据库查询来做到这一点。 –

但是由于以下限制,我也无法找到SQL服务器(我使用的)的最佳方法: 1.使用本机JDBC DatabaseMetaData.getProcedureColumns返回null:P 2.使用Spring只能告诉参数名称和类型但不是默认值的库。 3.使用上述信息将NULL值绑定到这些参数不会有所帮助,因为这些NULL会覆盖默认值,并会影响Procedures中的逻辑。

我也写了我返回程序的整个签名过程,它是这样的:

CREATE PROCEDURE [DBO] [GetString的(@ proc_name中的varchar(100),@string VARCHAR(1000)OUT。 )作为 DECLARE @val VARCHAR(MAX) 声明@Table TABLE( 缬氨酸VARCHAR(MAX) ) BEGIN INSERT INTO @Table EXEC sp_helptext的@proc_name SELECT @val = COALESCE(@val + '' +缬氨酸,Val) FROM @Table select @string = @Val END

此过程返回过程的签名,如果传递给它的名称为In Param。 然后我在String上做了一些处理并获得了它们的默认值。