我在VB中执行以下查询时遇到错误(我使用宏来运行此查询)。但是在ORACLE中,相同的查询运行文件并给出了预期的结果。 请注意,“XML_FIELD”是一个包含XML数据的CLOB。我试图使用VB宏从“XML_FIELD”中提取数据。
在SQL中查询:执行正常:
--->从TAB_1中选择xmltype(XML_FIELD).extract('// XML_TAGNAME / text()')。getStringVal()作为NEW_COL,其中TEST_ID = 123
在VBA中查询:
Sub Extract_CLOB()
Dim SQL As String
昏暗的OraDynaSet作为对象
'评论:我使用两个单引号('')来逃避另一个单引号
SQL =“选择xmltype(XML_FIELD).extract(''// XML_TAGNAME / text()'')。getStringVal()为TAB_1的NEW_COL,其中TEST_ID = 123”
设置OraDynaSet = objDataBase.DBCreateDynaset(SQL,0&)
结束子
答案 0 :(得分:0)
我尝试了这段代码并且效果很好。我在emp表中添加了一个clob字段。
Public objSession As Object
Public objDataBase As Object
Sub ConnectToOracle()
'Create a reference to the OO4O dll
Set objSession = CreateObject("OracleInProcServer.XOraSession")
'Create a reference to my database
Set objDataBase = objSession.OpenDatabase("mydb", "scott/tiger", 0&)
Dim strSQL As String
Dim strTxt As String
Dim OraDynaSet As Object
strSQL = "select xmltype(MyXMLField).extract('//ROWSET//ROW//JOB/text()').getStringVal() as NEW_COL from emp where empno = 2"
'Retrieve the results from Oracle
Set OraDynaSet = objDataBase.DBCreateDynaset(strSQL, 0&)
strTxt = CStr(OraDynaSet.Fields(0).Value)
MsgBox strTxt
End Sub
我的xml是:
<?xml version="1.0"?>
<ROWSET>
<ROW num="1">
<EMPNO>7</EMPNO>
<ENAME>S</ENAME>
<JOB>CLERK</JOB>
<MGR>7</MGR>
<HIREDATE>12/17/2008 0:0:0</HIREDATE>
<SAL>999</SAL>
<DEPTNO>20</DEPTNO>
</ROW>
</ROWSET>