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

时间:2012-05-02 12:25:10

标签: jdbc

我需要获取分配给存储过程参数的默认值。

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

例如,如果我有以下存储过程

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

然后我需要获得param3,param4&的默认值。 param5即“SOMEVALUE',' OTHERVALUE' &安培; NULL

由于

2 个答案:

答案 0 :(得分:1)

原则上,您应该可以使用DatabaseMetaData.getProcedureColumns(),字段COLUMN_DEF来检索此值。但是,并非所有司机都支持这一点。

答案 1 :(得分:0)

然而,由于以下限制,我也找不到为SQL服务器(我正在使用)执行此操作的最佳方法: 1.使用本机JDBC DatabaseMetaData.getProcedureColumns返回null:P 2.使用Spring库,它只告诉参数名称和类型,但不是默认值。 3.使用上述信息将NULL值绑定到这些参数没有帮助,因为这些NULL会覆盖默认值并对Procedures中的逻辑造成灾难。

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

创建过程[dbo]。[GetString](@ proc_name varchar(100),@ string varchar(1000)OUT)as 宣布 @Val VARCHAR(MAX) 声明@Table TABLE(         Val VARCHAR(MAX) ) 开始 INSERT INTO @Table EXEC sp_helptext @proc_name SELECT @Val = COALESCE(@ Val +''+ Val,Val) 来自@Table 选择@string = @Val END

此过程返回过程的签名,该过程的名称如果以In Param的形式传递给它。 然后我对String进行了一些Ptocessing并得到了它们的默认值。