我正在编写一个从Oracle数据库中检索数据的工具。大多数字段都是VARCHAR2,但是我想要检索的一个特定字段是CLOB。我正在尝试将此CLOB中的文本转换为字符串,然后我可以对其运行正则表达式以隔离某些信息,然后在程序的控制台中显示该信息。不幸的是,我似乎无法弄清楚如何将这个CLOB转换为可用的字符串。
我尝试了很多不同的东西,但我现在得到的是:
With OraDynaset
If .RecordCount > 0 Then
.MoveFirst()
While (Not .EOF Or .BOF)
m_StrThis = .Fields("This").Value
clobSupportProcs = .Fields("That").Value
m_strThat = (clobSupportProcs).ToString
.MoveNext()
End While
End If
End With
字段“This”工作正常,因为它不是CLOB。 “那个”字段是麻烦制造者。我在其他帖子中读过,有一种方法可以将这些内容流式传输到可用的内容中,但我还没有看到一个明确的示例,说明如何完成。
我很感激任何建设性意见或帮助。我知道使用CLOB并不需要开始 - 但是这个数据库已经超过10年了。我无法控制。我知道我以不太优雅的方式连接到数据库。我不在乎。我只需要这两点信息。我不是专业人士,只是一个人试图编写一个让他的生活更轻松的工具。任何帮助深表感谢。无益的评论不是。
谢谢!
答案 0 :(得分:1)
我使用ODAC(Oracle数据访问组件)与PowerShell合作使用Oracle CLOB。
http://www.oracle.com/technetwork/developer-tools/visual-studio/downloads/index.html
http://download.oracle.com/docs/cd/B28359_01/win.111/b28375.pdf
ODAC库允许您使用VB.NET或C#来使用Oracle。
在这里处理......
$id = $reader.getstring(0) # DOCUUID
$xmlDoc = [xml] $reader.getstring(1) # XML (THIS IS THE CLOB)
$datasetName = $reader.getstring(2) # DATASETNAME
以下是更新clob(PowerShell代码)
的方法$sql = "UPDATE GPT_METADATA SET XML = :1 WHERE DOCUUID = '" + $id + "'"
$updateCmd = New-Object Oracle.DataAccess.Client.OracleCommand ($sql, $conn)
$param = New-Object Oracle.DataAccess.Client.OracleParameter (
"xml", #Name
[Oracle.DataAccess.Client.OracleDbType]::Clob, #Type
$xmlDoc.OuterXml, #Data
'Input' #Direction
)
执行更新
$newParam = $updateCmd.Parameters.Add($param)
$result = $updateCmd.ExecuteNonQuery()
答案 1 :(得分:1)
我终于能够通过玩可能的属性和方法来解决这个问题。
解决方案是:
Dim clobSupportProcs As OracleInProcServer._IOraClob
Dim clobSize As Integer
Dim clobOut As String
With OraDynaset
If .RecordCount > 0 Then
.MoveFirst()
While (Not .EOF Or .BOF)
m_StrThis = .Fields("THIS").Value
clobSupportProcs = .Fields("THAT").Value
clobSize = clobSupportProcs.size
If clobSize > 0 Then
clobSupportProcs.Read(clobOut)
m_strThat= clobOut
Else
m_strThat= "None"
End If
.MoveNext()
End While
End If
End With
所以基本上,你把clob读成一个字符串(clobOut)。