2017-07-12 6 views
-2

特定のパッケージ内の特定のOracleプロシージャのパラメータをフェッチしようとしています。常にデータは返されません。JavaでOracleパッケージプロシージャのパラメータを取得する

私たちのロジックは、パッケージに含まれていないプロシージャのパラメータをフェッチするときにうまく機能します。私はこれがうまくいくと思った。それはパッケージ名を要求するので、私は何か他のことをする必要はないと思った。私は接続していたら

我々はこれを実行します。

dbMetaData = conn.getMetaData(); 
rs = dbMetaData.getProcedureColumns(packageName, null, procedureName, null); 
while(rs.next()){ 
    ... 
} 

rs.nextは常にfalseです。私は何かを欠いているに違いない?

+0

*「getProcedureColumns(Stringカタログ、String schemaPattern、String procedureNamePattern、String columnNamePattern)」](https://docs.oracle.com/javase/8/) docs/api/java/sql/DatabaseMetaData.html#getProcedureColumns-java.lang.String-java.lang.String-java.lang.String-java.lang.String-)メソッドは*パッケージ*の名前を要求しますか? – Andreas

+0

申し訳ありませんが、私は確かにOracleの専門家ではありません。私はoracleパッケージがカタログとして適用可能だと思った。 paramsを取得すると、SimpleJdbcCallを使用してプロシージャを実行します。 SimpleJdbcCallクラスには、 "withCatalogName"というメソッドがあります。 そのためのjava docは読み取ります:オプションとして、ストアドプロシージャを継承するカタログの名前を指定します。 Oracle DatabaseMetaDataに一貫性を持たせるために、プロシージャがパッケージの一部として宣言されている場合は、パッケージ名を指定するために使用されます。 – nmb1106

答えて

0

私は最終的にあなたがスキーマパターンフィールドでスキーマを渡した場合、このコールが機能することがわかりました。スキーマがなければ、oracleパッケージは見つかりません。

rs = dbMetaData.getProcedureColumns(packageName、schemaName、procedureName、 "%");

+0

問題が解決した場合は問題ありませんが、これは当てはまりません。 'schemaPattern'の使用はここではフィルターの一種です。 「NULL」は、スキーマ名が検索の絞り込みに使用されないことを意味します。それがあなたの手続きを検索しないことを意味するものではありません。 Oracleドキュメントで 'DatabaseMetaData'をチェックすることができます。 –

1

プロシージャのすべての列を取得したいですか?したがって、nullの代わりに%を使用する必要があります。下図のようにコードを変更してみて、もう一度試してください:

rs = dbMetaData.getProcedureColumns(packageName, null, procedureName, "%"); 
+0

@ nmb1106:これで問題は解決していませんか? –

+0

完全ではありませんが、助けになりました。最終的にそれを解決した私の公表された答えを見てください。 – nmb1106

関連する問題