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
'コメント:2つの単一引用符('')を使用して、他の単一引用符をエスケープしています
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 フィールドを 1 つ追加しました。

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 に答える