0

ストアド プロシージャ パラメータに割り当てられたデフォルト値を取得する必要があります。

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 を取得する必要があります。

ありがとう

4

2 に答える 2

1

DatabaseMetaData.getProcedureColumns()原則として、フィールドを使用してこの値を取得できるはずですCOLUMN_DEF。ただし、すべてのドライバーがこれをサポートしているわけではない可能性があります。

于 2012-05-02T14:32:30.403 に答える
0

ただし、次の制限のために、SQLサーバー(私が使用していた)でそれを行う最良の方法を見つけることもできませんでした:1.ネイティブJDBC DatabaseMetaData.getProcedureColumnsを使用するとnullが返されます:P 2.パラメータのみを伝えるSpringライブラリを使用する名前とタイプが含まれますが、デフォルト値ではありません。3. 上記の情報を使用して NULL 値をこれらのパラメータにバインドしても、これらの NULL はデフォルト値を上書きし、プロシージャ内のロジックに障害を起こすため、役に立ちません。

プロシージャの署名全体を返すプロシージャを作成しました。次のようになります。

create procedure [dbo].[GetString](@proc_name varchar(100), @string varchar(1000) OUT) as DECLARE @Val VARCHAR(MAX) declare @Table TABLE( Val VARCHAR(MAX) ) BEGIN INSERT INTO @Table EXEC sp_helptext @proc_name SELECT @Val = COALESCE(@Val + ' ' + Val, Val) FROM @Table select @string = @Val END

このプロシージャは、名前が In Param として渡された場合、プロシージャのシグネチャを返します。次に、文字列に対していくつかの Ptocessing を実行し、デフォルト値を取得しました。

于 2015-12-04T07:11:42.177 に答える