問題タブ [sqlcode]
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.
c# - DB2OLEDB を介してストアド プロシージャを実行すると、-379 の SQLCode を受け取る
C# から Dd2OleDb ver.6 ドライバーを使用して、DB2 でストアド プロシージャを呼び出そうとしています。を呼び出すとcmd.ExecuteNonQuery
、OleDbException
SQLCode -379 の がスローされます。メッセージ全文は以下。
正常に動作する別のストアド プロシージャへの同様の呼び出しがあります。
どちらのストアド プロシージャも、IBM DB2 クライアントを使用すると問題なく動作しますが、OleDB を使用する標準を採用しようとしています。すべてのパラメータ値が正しいタイプで、範囲内にあります。
OS: Windows 8.1
.Net フレームワーク 4.6.1 Visual Studio 2017
C# クライアント
ストアド プロシージャ ヘッダー:
完全なエラー メッセージは次のとおりです。
System.Data.OleDb.OleDbException
HResult=0x80040E14
Message=内部ネットワーク ライブラリ エラーが発生しました。ネットワーク レベルの構文エラーが発生しました。SQLSTATE: HY000、SQLCODE: -379
ソース = System.Dataスタックトレース:
System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling (OleDbHResult hr) で System.Data.OleDb.OleDbCommand.ExecuteCommandTextForMultpleResults (tagDBPARAMS dbParams、Object& executeResult) で System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult) で System.Data. System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior 動作、文字列メソッド) の OleDb.OleDbCommand.ExecuteCommand(CommandBehavior 動作、Object& executeResult) System.Data.OleDb.OleDbCommand.ExecuteNonQuery()、CustomerCare.DataAccess.CisDataAccess.UpdateLog( C:\TFS\MSServer\Source\Main\DataAccess\CisDataAccess.cs の 10 進数の customerNbr、10 進数の premiseNbr、10 進数の cmsgType、String cmsgText): C の DataAccessTest.CisDataAccessTest.UpdateLog_Test() の 103 行目:\TFS\MSServer\Source\Main\DataAccessTest\CisDataAccessTest.cs: 30 行目
System.IndexOutOfRangeException
HResult=0x80131508
Message=Count=6 のこの OleDbParameterCollection の無効なインデックス -1。
ソース=System.Data
stored-procedures - DB2 LUW - ストアド プロシージャでエラー行を取得する
エラーの原因となっているストアド プロシージャまたは最後の SQL ステートメントの行を特定しようとしています。回避策として、手動で設定した一時変数を使用して、ストアド プロシージャのどの部分でエラーが発生したかを判断しています。
以下を参照してください。
私は以下を取得します:
ERRSQLCODE | コードパート | タイプ | MSGTEXT |
---|---|---|---|
-801 | a | え | SQL0801N ゼロによる除算が試行されました。 |
-801 | b | え | SQL0801N ゼロによる除算が試行されました。 |
100 | c | W | SQL0100W FETCH、UPDATE、または DELETE の行が見つかりませんでした。またはクエリの結果が空のテーブルです。 |
したがって、エラーまたは警告が発生したコードの部分を取得できますが、コードのすべての部分を一時変数で指定したくないため、行または SQL ステートメントを取得する方がよいでしょう。
私はすでにこのSQLCA --> sqlerrd(3) を見つけました。エラーが発生した番号」。今のところ、SQLCA 変数をうまく利用できませんでした。ストアド プロシージャで DB2 LUW に実装する方法がわかりません。
エラーの原因となっているストアド プロシージャ内の特定の行または SQL ステートメントをログに記録する別の/より良い方法はありますか?
私の DB2 バージョンは 10.5.0 です。
ありがとうございました!
stored-procedures - DB2 LUW バージョン 10.5.0.10 - ストアド プロシージャに警告 (見つかりません) 行が表示される
ストアド プロシージャまたは最後の SQL ステートメントの行を特定しようとしていますが、これは警告または見つからない原因となっています。回避策として、手動で設定した一時変数を使用して、ストアド プロシージャのどの部分で警告が発生するかを判断しています。
私は以下を取得します:
ERRSQLCODE | コードパート | タイプ | MSGTEXT |
---|---|---|---|
100 | a | W | SQL0100W FETCH、UPDATE、または DELETE の行が見つかりませんでした。またはクエリの結果が空のテーブルです。 |
エラーには、エラーのトレースに使用できる関数 DBMS_UTILITY.FORMAT_ERROR_BACKTRACE があることを知っています。残念ながら、その関数は警告を追跡しません。関数 DBMS_UTILITY.FORMAT_CALL_STACK もありますが、これも機能しません。
警告/見つからないストアド プロシージャの特定の行または SQL ステートメントをログに記録する別の/より良い方法はありますか?
sql-server - 算術オーバーフロー:「数値をデータ型数値に変換しています」エラー
データ型 Decimal (16,4) を持つ 2 つの列があります。
- 保有株式数
- 発行済株式総数
これらの 2 つの列を使用してパーセンテージを計算し、それを Decimal(7,4) に変換しようとしています。
使用されているコード:
「数値をデータ型数値に変換中に算術オーバーフロー エラーが発生しました。」というエラー メッセージが表示されます。
誰かが私がどこで間違っているのかを理解するのを手伝ってもらえますか?