Vb.net 错误的Oracle数字或值错误

Vb.net 错误的Oracle数字或值错误,vb.net,oracle,oracle11g,corruption,ora-06502,Vb.net,Oracle,Oracle11g,Corruption,Ora 06502,我遇到了一个持续的问题,windows服务在该问题中遇到以下Oracle错误: 消息:ORA-06502:PL/SQL:数字或值错误:字符到数字转换错误 但是,我确信我正在向Oracle传递一个数值。通过使用我们的Oracle DBA和Oracle支持票证,我们能够捕获Oracle服务器接收到的内容。我的问题是绑定变量#10。服务器上跟踪日志中Oracle报告的值为“A@Y8”。但是,我实际发送的值是167569173 “甲骨文价值”A@Y8“看起来不熟悉–它不是来自另一个字段的值。它在Orac

我遇到了一个持续的问题,windows服务在该问题中遇到以下Oracle错误:

消息:ORA-06502:PL/SQL:数字或值错误:字符到数字转换错误

但是,我确信我正在向Oracle传递一个数值。通过使用我们的Oracle DBA和Oracle支持票证,我们能够捕获Oracle服务器接收到的内容。我的问题是绑定变量#10。服务器上跟踪日志中Oracle报告的值为“A@Y8”。但是,我实际发送的值是167569173

“甲骨文价值”A@Y8“看起来不熟悉–它不是来自另一个字段的值。它在Oracle跟踪文件中始终是相同的值–始终A@Y8. 但是我发送的数值对于每个记录都是不同的。


该服务每隔几分钟从外部源提取数据并将其插入Oracle。它工作了大约两天,然后我得到了ORA-06502。一旦我得到Oracle错误,我会在每次通过时都得到它,直到我重新启动服务。当服务重新启动时,它会在几天内运行属性,即使它正在提取导致错误的相同数据




  • Windows服务是用VB.Net编写的
  • 当我读取数据时,我将字段放入可为空的整数- Int32
  • 我将这个变量发送到一个Oracle包,该包抛出 ORA-06502和跟踪值显示“A@Y8".
  • 然后我记录变量的值,我的日志显示为数值
    (记录为167569173)
转换错误发生在对过程的调用上。也就是说,当尝试将参数传递给过程中实际插入的过程no时

不知何故,我的代码中的整数值在Oracle接收时不是整数。看起来有些腐败,但我认为Vb.Net中没有。我的字段是一个整数,不包含Oracle reports的值。 如果字段确实包含该值,那么在我记录该值时,它应该记录该值。


如何查看Oracle客户端向Oracle服务器发送的值?我找不到任何相关的客户端日志。

你知道是什么导致了这一切吗?


这是Oracle跟踪条目:

Bind#10
oacdty=01 mxl=32(22) mxlc=00 mal=00 scl=00 pre=00
oacflg=03 fl2=1000010 frm=01 csi=178 siz=0 off=480
kxsbbbfp=9fffffffbed31848 bln=32 avl=06 flg=01
value="A@Y8" 
EXEC #11529215044982021440:c=0,e=1300,p=0,cr=34359738368,cu=0,mis=0,r=0,dep=0,og=1,plh=0,tim=2656312500288
ERROR #4:err=6502 tim=2656312500311
这是我的密码: 这是插入数据库的方法-它抛出错误:

Public Shared Sub AddNewUploadedDocument(document As ManualUploadDocument)
    Using conn As OracleConnection = DataFactory.GetConnection()
        Using command As New OracleCommand("OM.EXTERNAL_DOCUMENT_OBJECTS.insertUploadedDocuments", conn)
            command.CommandType = CommandType.StoredProcedure
            command.Parameters.Add("tSelecteeID", document.SelecteeID)
            command.Parameters.Add("tFileName", document.FileNameGUID)
            command.Parameters.Add("tFileType", document.FileType)
            command.Parameters.Add("tOriginalFileName", document.OriginalFileName)
            command.Parameters.Add("tOriginalFileType", document.OriginalFileType)
            command.Parameters.Add("tDocTypeID", DBNull.Value)
            command.Parameters.Add("tStatus", document.Status.ToString())
            command.Parameters.Add("tSource", Integer.Parse(document.Source))
            command.Parameters.Add("tSubmitted", Convert.ToInt32(document.Submitted))
            command.Parameters.Add("tIsStaffingConversion", Convert.ToInt32(document.IsStaffingConversion))
            command.Parameters.Add("tStaffingDocumentationID", document.StaffingDocumentationID)

            command.ExecuteNonQuery()
        End Using
        'close connection
        conn.Close()
    End Using

End Sub
在此之后,我调用此方法来记录值:

Private Shared Function getInsertAttemptFields(document As OnBoardingDataObjects.ManualUploadDocument) As String
    Dim sb As New StringBuilder()
    sb.AppendLine("Insert Fields")
    sb.Append("tSelecteeID:")
    sb.AppendLine(document.SelecteeID)
    sb.Append("tFileName:")
    sb.AppendLine(document.FileNameGUID)
    sb.Append("tFileType:")
    sb.AppendLine(document.FileType)
    sb.Append("tOriginalFileName:")
    sb.AppendLine(document.OriginalFileName)
    sb.Append("tOriginalFileType:")
    sb.AppendLine(document.OriginalFileType)
    sb.Append("tDocTypeID:")
    sb.AppendLine("<null>")
    sb.Append("tStatus:")
    sb.AppendLine(document.Status.ToString())
    sb.Append("tSource:")
    sb.AppendLine(Integer.Parse(document.Source))
    sb.Append("tSubmitted:")
    sb.AppendLine(Convert.ToInt32(document.Submitted))
    sb.Append("tIsStaffingConversion:")
    sb.AppendLine(Convert.ToInt32(document.IsStaffingConversion))
    sb.Append("tStaffingDocumentationID:")
    sb.AppendLine(document.StaffingDocumentationID)

    Return sb.ToString()
End Function
私有共享函数getInsertAttemptFields(文档作为OnBoardingDataObjects.ManualUploadDocument)作为字符串
使某人成为新的架线工
sb.追加行(“插入字段”)
sb.追加(“tSelecteeID:”)
sb.追加行(文档.选择ID)
sb.追加(“tFileName:”)
sb.AppendLine(document.FileNameGUID)
sb.Append(“tFileType:”)
sb.AppendLine(document.FileType)
sb.追加(“tOriginalFileName:”)
sb.附录行(文件原始文件名)
sb.追加(“tOriginalFileType:”)
sb.附录行(文档原始文件类型)
sb.Append(“tDocTypeID:”)
某人加上一行(“”)
某人附加(“tStatus:”)
sb.AppendLine(document.Status.ToString())
sb.Append(“tSource:”)
sb.AppendLine(Integer.Parse(document.Source))
某人附加(“提交:”)
sb.附录行(转换为32(已提交文件))
sb.追加(“tistaffingconversion:”)
sb.附录行(转换为32(文件转换)
sb.追加(“tStaffingDocumentationID:)
sb.附录行(文件StaffingDocumentationID)
把某人送回原处
端函数
这是我传递给这两个方法的同一个对象。StaffingDocumentationID字段是Oracle跟踪显示为的字段A@Y8日志显示为167569173

下面是我正在传递的manualUploadDocument对象的定义。为了简洁起见,我删除了一些方法中的代码——这些属性在这里是相关的,删除的代码不引用它们

<Serializable()>
Public Class ManualUploadDocument

    Private _Submitted As Boolean = False

    Public Property DocumentUploadID As Integer
    Public Property SelecteeID As Integer
    Public ReadOnly Property FileName As String
        Get
            Return FileNameGUID + "." + FileType
        End Get
    End Property
    Public Property FileType As String
    Public Property OriginalFileName As String = ""
    Public Property OriginalFileType As String = ""
    Public Property DocumentTypeID As Integer
    Public Property DocumentType As String = ""
    Public Property UploadDate As Date
    Public Property FileNameGUID As String
    Public Property Status As PublicEnums.ManualUploadStatus
    Public Property Source As PublicEnums.ManualUploadSource
    Public Property IsMarkedFortransmission As Boolean = False
    Public Property TransmissionStatusDescription As String
    Public Property IsStaffingConversion As Boolean = False
    Public Property StaffingDocumentationID As Int32?


    Public Property Submitted As Boolean
        Get
            Return _Submitted
        End Get
        Set(value As Boolean)
            _Submitted = value
        End Set
    End Property


    Public Shared Function getStatusDisplayName(status As PublicEnums.ManualUploadStatus) As String
        Dim name As String = ""
        'Some code here

        Return name
    End Function

    Public Shared Function getStatusDescription(status As PublicEnums.ManualUploadStatus) As String
        Dim val As String = ""
        'Some code here

        Return val
    End Function

End Class

公共类手册上载文档
Private _以布尔值形式提交=False
公共属性DocumentUploadID为整数
公共属性SelecteeID为整数
公共只读属性文件名为字符串
得到
返回FileNameGUID+“+”文件类型
结束
端属性
公共属性文件类型为字符串
公共属性OriginalFileName As String=“”
公共属性OriginalFileType为String=“”
公共属性DocumentTypeID为整数
公共属性DocumentType为String=“”
公共属性上载日期为日期
公共属性FileNameGUID为字符串
公共属性状态为PublicEnum.ManualUploadStatus
公共属性源为PublicEnum.ManualUploadSource
公共属性被标记为布尔值=False
公共属性传输StatusDescription为字符串
公共属性IsStaffingConversion为布尔值=False
公共财产是否为Int32?
作为布尔值提交的公共属性
得到
已提交报税表
结束
设置(值为布尔值)
_提交=价值
端集
端属性
作为字符串的公共共享函数getStatusDisplayName(状态为PublicEnums.ManualUploadStatus)
Dim name As String=“”
“这里有一些代码
返回名称
端函数
公共共享函数getStatusDescription(状态为PublicEnums.ManualUploadStatus)作为字符串
Dim val As String=“”
“这里有一些代码
返回值
端函数
末级

好吧,我在提供的代码中没有看到任何错误。因此,OM.EXTERNAL_DOCUMENT_OBJECTS.insertUploadedDocuments存储过程中应该存在一些错误。无论如何,我有三条建议:

1-确保存储过程OM.EXTERNAL\u DOCUMENT\u OBJECTS.insertUploadedDocuments正确无误。
2-在AddNewUploadedDocument中使用try-catch块,如:

Public Shared Sub AddNewUploadedDocument(document As ManualUploadDocument)
    Using conn As OracleConnection = DataFactory.GetConnection()
        Using command As New OracleCommand("OM.EXTERNAL_DOCUMENT_OBJECTS.insertUploadedDocuments", conn)
            Try


            command.CommandType = CommandType.StoredProcedure
            command.Parameters.Add("tSelecteeID", document.SelecteeID)
            command.Parameters.Add("tFileName", document.FileNameGUID)
            command.Parameters.Add("tFileType", document.FileType)
            command.Parameters.Add("tOriginalFileName", document.OriginalFileName)
            command.Parameters.Add("tOriginalFileType", document.OriginalFileType)
            command.Parameters.Add("tDocTypeID", DBNull.Value)
            command.Parameters.Add("tStatus", document.Status.ToString())
            command.Parameters.Add("tSource", Integer.Parse(document.Source))
            command.Parameters.Add("tSubmitted", Convert.ToInt32(document.Submitted))
            command.Parameters.Add("tIsStaffingConversion", Convert.ToInt32(document.IsStaffingConversion))
            command.Parameters.Add("tStaffingDocumentationID", document.StaffingDocumentationID)

            command.ExecuteNonQuery()

            Catch Ex as Exception
                 Log (document.StaffingDocumentationID)
                 Log (Ex.StackTrace)
            End Try
终端使用
End Sub