読者です 読者をやめる 読者になる 読者になる

minato128 blog

minato128の公開メモ帳です。

ODP.NETでのストアド実行エラー

ODP.NET

ODP.NETでのストアド実行しようとしてたら、
オラクルからこれ(ORA-06502: PL/SQL: 数値または値のエラー: 文字列バッファが小さすぎます)が返ってくる。


ストアドのvarchar2のアウトパラメータにサイズ設定してなかった…
またかー。すぐ忘れるなー。

こんな感じのファンクションをパラメータ設定用に作っておけばよさそう(適当)

    Public Sub AddOraParam(ByVal parameterName As String, _
                                    ByVal direction As ParameterDirection, _
                                    ByVal dbType As OracleDbType, _
                                    ByVal value As String)
        '通常はsize=0
        AddOraParam(parameterName, direction, dbType, 0, value)
    End Sub

    Public Sub AddOraParam(ByVal parameterName As String, _
                                    ByVal direction As ParameterDirection, _
                                    ByVal dbType As OracleDbType, _
                                    ByVal size As Integer, _
                                    ByVal value As String)
        Try
            ' パラメータ生成
            Dim parameter = New OracleParameter(parameterName, dbType, direction)

            If ParameterDirection.Output = direction OrElse ParameterDirection.ReturnValue = direction Then
                'OutputとReturnValueのときは値をセットしない
                If dbType = OracleDbType.Varchar2 OrElse dbType = OracleDbType.Char Then
                    If size = 0 Then
                        '文字列をアウトパラメータに指定したときは、サイズを指定しないとエラー
                        'Return エラー値返すとかロギングとか
                    Else
                        'サイズ設定
                        parameter.Size = size
                    End If
                End If
            Else
                'Inputの値をセット
                If String.IsNullOrEmpty(value) Then
                    'Inputに指定したときは、valueがないとエラー
                    'Return エラー値返すとかロギングとか
                Else
                    '値とサイズ設定
                    parameter.Value = value
                    parameter.Size = size
                End If
            End If

            _bindParameter.Add(parameter)
        Catch ex As Exception
            'Return エラー値返すとかロギングとか
        End Try
    End Sub