在VBA中执行SQL查询时出错

时间:2012-11-30 04:41:56

标签: sql xml vba

我在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

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

在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&)
结束子

1 个答案:

答案 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>