Vb.net 错误的Oracle数字或值错误
我遇到了一个持续的问题,windows服务在该问题中遇到以下Oracle错误: 消息:ORA-06502:PL/SQL:数字或值错误:字符到数字转换错误 但是,我确信我正在向Oracle传递一个数值。通过使用我们的Oracle DBA和Oracle支持票证,我们能够捕获Oracle服务器接收到的内容。我的问题是绑定变量#10。服务器上跟踪日志中Oracle报告的值为“A@Y8”。但是,我实际发送的值是167569173 “甲骨文价值”A@Y8“看起来不熟悉–它不是来自另一个字段的值。它在Oracle跟踪文件中始终是相同的值–始终A@Y8. 但是我发送的数值对于每个记录都是不同的。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
该服务每隔几分钟从外部源提取数据并将其插入Oracle。它工作了大约两天,然后我得到了ORA-06502。一旦我得到Oracle错误,我会在每次通过时都得到它,直到我重新启动服务。当服务重新启动时,它会在几天内运行属性,即使它正在提取导致错误的相同数据
- Windows服务是用VB.Net编写的
- 当我读取数据时,我将字段放入可为空的整数- Int32
- 我将这个变量发送到一个Oracle包,该包抛出 ORA-06502和跟踪值显示“A@Y8". 李>
- 然后我记录变量的值,我的日志显示为数值
(记录为167569173)
如何查看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