我正在尝试更新Oracle数据库记录,并且我不断收到此错误:
ORA-01704: string literal too long 5
我查了那个错误,似乎我有40个章程限制,因为我使用的是Oracle 10g。然而,prgblem是它与我记录的相同的确切数据,所以这就是为什么我不确定为什么它给我这个错误的相同数量的数据我拿走了它。
这是我的更新代码:
Dim myCommand As New OracleCommand()
Dim ra As Integer
Try
myCommand = New OracleCommand("Update CSR.CSR_EAI_SOURCE Set STATUS_CODE = 'Blah', COMPLETE_DATE = '', DATA = '" & theData & "' WHERE EID = '81062144'", OracleConnection)
ra = myCommand.ExecuteNonQuery()
OracleConnection.Close()
Catch
MsgBox("ERROR" & Err.Description & " " & Err.Number)
End Try
我不确定是否有什么特别的事情可以让你更新clob。
我像这样提取clob:
Dim blob As OracleClob = dr.GetOracleClob(9)
Dim theData As String = ""
theData = blob.Value
它可以很好地提取但只是没有把它放回去。
任何帮助都会很棒!
大卫
更新代码
Dim OracleCommand As New OracleCommand()
Dim myCommand As New OracleCommand()
Dim ra As Integer
While dr.Read()
Dim blob As OracleClob = dr.GetOracleClob(9)
Dim theData As String = ""
theData = blob.Value
theData = Replace(theData, "…", " ")
Try
Dim strSQL As String
isConnected2 = connectToOracleDB2()
OracleConnection.Close()
If isConnected2 = False Then
MsgBox("ERRORConn: " & Err.Description & " " & Err.Number)
Else
myCommand.Connection = OracleConnection2
strSQL = "Update CSR.CSR_EAI_SOURCE Set STATUS_CODE = 'ERROR', COMPLETE_DATE = '', DATA = :1 WHERE EID = '" & theEID & "'"
myCommand.CommandText = strSQL
Dim param As OracleParameter = myCommand.Parameters.Add("", OracleDbType.Clob)
param.Direction = ParameterDirection.Input
param.Value = theData
Application.DoEvents()
ra = myCommand.ExecuteNonQuery()
Application.DoEvents()
OracleConnection2.Close()
Application.DoEvents()
End If
Catch
MsgBox("ERROR: " & Err.Description & " " & Err.Number)
OracleConnection2.Close()
End Try
End While
dr.Close()
OracleConnection.Close()
答案 0 :(得分:1)
不要将值硬编码到SQL查询中。而是将其包装在参数中。像这样:
Dim strSQL As String
strSQL = "Update CSR.CSR_EAI_SOURCE Set STATUS_CODE = 'Blah', COMPLETE_DATE = '', DATA = :1 WHERE EID = '81062144'"
myCommand.CommandText=strSQL
然后:
Dim param As OracleParameter=myCommand.Parameters.Add("",OracleDbType.Clob)
param.Direction=ParameterDirection.Input
param.Value=blob.Value
您当然可以(并且应该)将查询的所有其他变量(状态代码,完整日期,eid)添加为参数,而不是将它们硬编码到SQL中。
答案 1 :(得分:0)
sql中的Varchar2有4000个字符的限制。此限制不适用于存储在varchar列中的数据。您需要将其转换为pl \ sql或指定其他列类型。 (我不是一个php专家。所以我不能提供任何样本,只是你错误的原因)。
实际上,您需要在执行绑定查询时将数据类型指定为clob。否则它将默认为varchar2,并且将适用上述限制。