- - PR -
VB.NETからOracleのDBMS_ALERT.WAITANYを使用するとエラーが発生する
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2004-09-17 14:19
お世話になります。
VB.NETから、OracleのDBMS_ALERTを使用して、 テーブルに更新があった場合にアプリケーション側にアラートを送信する 処理を作成しています。 テーブルに更新が無い間の受信待ちでは、エラーは発生しないのですが、 テーブルを更新すると、下記のようなエラーが発生します。 ORA-06502: PL/SQL: numeric or value error ORA-06512: at "SYS.DBMS_ALERT", line 252 ORA-06512: at line 1 ORA-06502にて「PL/SQL:数値または値エラーが発生しました」といわれているようなのですが、 トリガのパラメータには、アラートの名前と1800バイト以下のメッセージを渡しています。 VB.NETの方からWAITANYに渡しているのも、inputはtimeoutだけなので、 こちらもエラーになっているとは考えにくい状態であり、行き詰まってしまいました。 解りにくい説明で申し訳ありませんが、何かご指摘いただければ幸いです。 *******以下にコードを記載します。************ <トリガー> CREATE OR REPLACE TRIGGER TRIGGER_TEST AFTER INSERT OR UPDATE OR DELETE OF "TEST_CD", "TEST_NAME" ON "TEST" BEGIN DBMS_ALERT.SIGNAL('TEST','UPDATED'); END; <VB.NET> ※conはOracleConnectionです。 'DBMS_ALERT.WAITANY 'メッセージの受信待ち Dim waitCmd As OracleCommand waitCmd = New OracleCommand waitCmd.CommandType = CommandType.StoredProcedure waitCmd.CommandText = "DBMS_ALERT.WAITANY" waitCmd.Connection = con Dim waitReader As OracleDataReader regCmd.BindByName = True Dim waitparam1 As OracleParameter Dim waitparam2 As OracleParameter Dim waitparam3 As OracleParameter Dim waitparam4 As OracleParameter waitparam1 = New OracleParameter waitparam1.ParameterName = "name" waitparam1.OracleDbType = OracleDbType.Varchar2 waitparam1.Direction = ParameterDirection.Output waitCmd.Parameters.Add(waitparam1) waitparam2 = New OracleParameter waitparam2.ParameterName = "message" waitparam2.OracleDbType = OracleDbType.Varchar2 waitparam2.Direction = ParameterDirection.Output waitCmd.Parameters.Add(waitparam2) waitparam3 = New OracleParameter waitparam3.ParameterName = "status" waitparam3.OracleDbType = OracleDbType.Int32 waitparam3.Direction = ParameterDirection.Output waitCmd.Parameters.Add(waitparam3) waitparam4 = New OracleParameter waitparam4.ParameterName = "timeout" waitparam4.OracleDbType = OracleDbType.Int32 waitparam4.Direction = ParameterDirection.Input waitCmd.Parameters.Add(waitparam4) waitCmd.Parameters("timeout").Value = 10 '無限ループ While (1) Try waitCmd.ExecuteNonQuery() If waitCmd.Parameters("status").Value = 1 Then Else 'dicttype = waitReader.GetString(1) dicttype = waitCmd.Parameters("name").Value If dicttype = "TEST" Then MsgBox("変更されました") Exit While End If End If Catch oex As OracleException MsgBox(oex.Message) Exit While Catch ex As Exception MsgBox(ex.Message) Exit While End Try End While 以上、よろしくお願いいたします。 環境: VB.NET Oracle10g Windows2000 Windows2003server [ メッセージ編集済み 編集者: aoi 編集日時 2004-09-17 14:19 ] [ メッセージ編集済み 編集者: aoi 編集日時 2004-09-17 17:57 ] |
1