問題タブ [callable-statement]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - CallableStatement を使用して NULL を設定する
SQL Server 2008でJDBCを使用しています。テーブルに、タイプが「decimal(18、2)」の列があります。「CallableStatement」を使用して、この列に null 値を挿入したいと考えています。それ、どうやったら出来るの?
私は試しcallstmt.setNull(14, java.sql.Types.DECIMAL);
ました。しかし、それは機能しません。
HTTP ステータス 404 - /NSBMHCGcom.microsoft.sqlserver.jdbc.SQLServerException:%20Error%20converting%20data%20type%20nvarchar%20to%20numeric./eHRMS_AR_M_display_SetupOTConditions
これは私が得ているエラーです。
タイプ ステータス レポート
message /NSBMHCGcom.microsoft.sqlserver.jdbc.SQLServerException:%20Error%20converting%20data%20type%20nvarchar%20to%20numeric./eHRMS_AR_M_display_SetupOTConditions
説明 要求されたリソース (/NSBMHCGcom.microsoft.sqlserver.jdbc.SQLServerException:%20Error%20converting%20data%20type%20nvarchar%20to%20numeric./eHRMS_AR_M_display_SetupOTConditions) は利用できません。
これはコードの一部です。
================================================== ==================================================
================================================== ==================================================
java - JavaからOracleプロシージャを呼び出す
以下は私の pl\sql と Java の使用法です:
PL\SQL:
ジャワ:
私は実行呼び出しでエラーが発生しています:
java.sql.SQLException: ORA-06550: 行 1、列 7: PLS-00306: 'GETDETAILS' の呼び出しで引数の数または型が間違っています
sql - 別の接続で CallableStament を実行することは可能ですか?
CallableStatement
のインスタンスを再利用することは、一般的に良い方法と考えられています (ここを確認してください)。
しかし、 を作成するときCallableStatement
、そのステートメントは (私の理解では) 特定の にバインドされConnection
ます。したがって、通常は次のようにします。
私が確認したところ、次のクエリは実行されません。
私の質問は、すべてのCallableStatement
インスタンスを再利用したいが、一方で新しい接続を取得して古い接続を閉じることができる場合 (常に同じ接続を開いているとは限らない)、どうすればよいですか?
java - 出力パラメーターを使用すると、CallableStatement getResultSet が null を返す
ストアド プロシージャから複数の結果セットを取得しようとすると、奇妙な結果が得られます。SQL Server Management Studio から直接実行すると、ストアド プロシージャは正常に動作します。
と の javadoc があるため、これは混乱を招きexecute
ますgetResultSet
。
execute: 最初の結果が ResultSet オブジェクトの場合は true を返します。最初の結果が更新カウントであるか、結果がない場合は false
getResultSet: ResultSet オブジェクトとしての現在の結果、または結果が更新カウントである場合、または結果がこれ以上ない場合は null
結果がこれ以上ない場合、getResultSet はここでのみ null を返す必要がありますよね? ただし、SQL サーバーでクエリを実行すると、3 つの結果セットが返されることがわかっています。
テストとして、getMoreResults()
何らかの理由で結果セットが欠落しているかどうかを確認するために実行しました。
getMoreResults
true を返しますが、結果セットを取得しようとすると、まだ NULL が返されます。結果セットをスキップするため、これはとにかく私が望むものではありませんが、少なくとも2番目の結果セットを取得する必要があります。
何が原因でしょうか? SQL Server が問題を引き起こしている結果セットを返す方法について何かありますか、それとも私が見逃しているものがありますか? 任意の提案をいただければ幸いです。
アップデート
これは、私が作成した出力パラメータに関連していたことが判明しました
パラメータを削除し、呼び出しを更新しました
そしてそれはうまくいきました。3 つの結果セットすべてを正しく取得できるようになりました。戻りコードはあまり気にしないので、おそらくこれで問題ありません。学術的な観点から、なぜ出力パラメータが結果セットの取得に問題を引き起こすのでしょうか?