У меня есть постоянный вопрос, в котором служба окна получает эту ошибку Oracle:Ошибочного Oracle числовой или значения ошибка
сообщения: ORA-06502: PL/SQL: числовую или значения ошибки: символ ошибки преобразования числа
Однако, я уверен что я передаю числовое значение Oracle. Работая с нашим Oracle DBA и билетом поддержки Oracle, мы смогли захватить то, что получает сервер Oracle. Моя проблема связана с переменной привязки # 10. Значение отчетов Oracle в журнале трассировки на сервере «A @ Y8». Однако значение, которое я фактически отправляю, равно .
Значение Oracle A @ Y8 не выглядит знакомым - это не значение из другого поля. Это всегда значение в файле трассировки Oracle - всегда A @ Y8. Но числовое значение, которое я отправляю, отличается для каждой записи.
Служба извлекает данные каждые несколько минут от внешнего источника и вставляет их в Oracle. Он работает около двух дней, а затем я получаю ORA-06502. Как только я получаю ошибку Oracle, я продолжаю получать ее на каждом проходе, пока не перезапущу службу. Когда служба перезагружается, она работает в течение нескольких дней, даже если она вытаскивает те же данные, которые вызывают ошибку.
- The службы Windows написано в VB.Net.
- Когда я прочитал данные, я поместил поле в значение NULL Integer - Int32 ?.
- Я отправляю эту переменную в пакет Oracle, который выдает ORA-06502, а значение трассировки показывает значение «A @ Y8».
- Затем я регистрирую значение переменной, и мой журнал показывает его как числовой
(он регистрируется как 167569173).
Ошибка преобразования происходит при вызове процедуры. То есть при попытке передать параметр в процедуру нет в фактической вставке внутри процедуры.
Как-то, значение Integer в моем коде не является целым, когда Oracle его получает. Там, кажется, некоторая коррупция, но я не думаю, что она находится в Vb.Net. Мое поле является целым числом и не будет содержать значение отчетов Oracle. Если в этом поле было сохранено это значение, тогда он должен регистрировать это значение, когда я его запишу.
Как я могу узнать, какое значение клиент 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="[email protected]"
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
Это тот же объект, что и для обоих методов. Поле 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
Что такое внешний источник? И, пожалуйста, добавьте свой код VB.NET, поскольку, несмотря на то, что вы уверены, ошибка, вероятно, вызвана им. – Lazarus
Я извлекаю данные из другой базы данных Oracle. Я отправлю код. –
Lazarus, любые идеи из кода, который я опубликовал. Вам нужна дополнительная информация? –