1

在 VB 中执行以下查询时出现错误(我正在使用宏来运行此查询)。但在 ORACLE 中,相同的查询运行文件并给我预期的结果。请注意,“XML_FIELD”是一个包含 XML 数据的 CLOB。我正在尝试使用 VB 宏从“XML_FIELD”中提取数据。

SQL 中的查询:执行良好:
---> select xmltype(XML_FIELD).extract('//XML_TAGNAME/text()').getStringVal() as NEW_COL from TAB_1 where TEST_ID = 123

VB 中的错误:SQL 执行错误 ora-00936 缺少表达式

VBA 中的查询:
Sub Extract_CLOB()
Dim SQL As String
Dim OraDynaSet As Object
' 注释:我使用两个单引号 (' ' ) 转义另一个单引号
SQL = "select xmltype(XML_FIELD).extract(''// XML_TAGNAME/text()'').getStringVal() as NEW_COL from TAB_1 where TEST_ID = 123"
Set OraDynaSet = objDataBase.DBCreateDynaset(SQL, 0&)
End Sub

4

1 回答 1

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>
于 2012-11-30T05:05:20.447 回答