2

DatabaseMetaData getProcedureColumnsストアドプロシージャの列名の順序?私は、SQLサーバー上のストアドプロシージャの列(読みパラメータ)を取得するためのDatabaseMetaData使用

Connection connection = getConnection(); //getting the connection - 
DatabaseMetaData dbMetaData = connection.getMetaData(); 

HashMap<String, Integer> paramInfo = new HashMap<String, Integer>(); 
if (dbMetaData != null){ 
    ResultSet rs = dbMetaData.getProcedureColumns (null, null, sp_name.toUpperCase(), "%"); 
    while (rs.next()) 
     paramInfo.put(rs.getString(4), rs.getInt(6)); 
    rs.close(); 
} 

は注文方法の手順の列を返すgetProcedureColumns()ていますか?データベース内でストアドプロシージャのパラメータがabc(@a int,@b int,@c int)の場合、私はいつも@a, @b and @cを順序通りに取得できますか?

「はい」の場合は、同じことを示すドキュメントがありますか?

答えて

2

すべてのJDBCドライバはJDBCの仕様およびAPIドキュメントを追跡するために必要な、とDatabaseMetaData.getProcedureColumnsのAPIドキュメントは、指定されています

は、与えられたカタログのストアドプロシージャ パラメータと結果列の記述を取得します。

スキーマ、プロシージャ、およびパラメータの名前が の条件に一致する説明のみが戻されます。それらはPROCEDURE_CAT, PROCEDURE_SCHEM,PROCEDURE_NAMEおよびSPECIFIC_NAMEで注文されます。この内で、 戻り値がある場合は、その値が最初になります。次に、呼び出し順序のパラメータ の説明です。列の説明は、列番号 の番号順に続きます。

ドライバがこの仕様に従わない場合、それはドライバのバグです。だから一般的に上記の説明に頼ることができるはずです。

それ以外の場合は、型(パラメータ、結果セットの列など)を指定する列COLUMN_TYPE(インデックス5)の値と、位置を記述するORDINAL_POSITION(インデックス18)の値を確認します(javadocの詳細を確認してください)。

+1

さらに、SQLServerDatabaseMetaData#getProcedureColumnsソースコードは、SQL Serverシステムストアドプロシージャ 'sp_sproc_columns'を呼び出していることを示しています。このプロシージャの[documentation](https://docs.microsoft.com/en-us/sql/relational- spc-sproc-columns-transact-sql)は、 "返される結果は、PROCEDURE_QUALIFIER、PROCEDURE_OWNER、PROCEDURE_NAME、およびプロシージャ定義にパラメータが表示される順序で並べ替えられます。 –

関連する問題