2012-12-06 32 views
1

我有兩個表:Table1Table2Table1具有列RECORDID,DATASOURCETYPESTRINGCLOB,而Table2具有列RECORDIDTIMESTAMPCLICKTYPE。我已經寫了一個查詢來發現從STRINGCLOB列CLOB XML字符串「書」,只要給定DATASOURCETYPE相匹配,如下所示:查詢包含CLOB數據類型的兩個表

SELECT SUBSTR(stringclob, instr(stringclob, 'type>')+5 
         , instr(stringclob,'</type') 
          - instr(stringclob, 'type>')-5 
      ) r_type from Table1 
where DataSourceType = 'Source1' 
    AND SUBSTR(stringclob, instr(stringclob,'type>')+5 
         , instr(stringclob, '</type') 
           - instr(stringclob, 'type>')-5 
      ) 
    like '%book%' 

現在,我想找到和計數出現的所有「在上個月(類似於AND TIMESTAMP > '01-Nov-12' AND TIMESTAMP < '01-Dec-12')和CLICKTYPE <> 'Type1'記錄的STRINGCLOB列(Table1)中記錄的「%book%%」字符串。我正在努力從兩個不同的表中查詢數據,有什麼想法?

感謝的確,

+0

不太知道我理解的問題,但如果這是XML數據爲什麼不使用['XMLType'](http://www.oracle-base.com/articles/9i/xmltype-datatype.php)和xpath等? – 2012-12-06 13:59:53

+0

傑克,感謝您的評論。我不是XML Type的熟人,但它看起來是解決問題的正確方法。謝謝。 – paranza

+0

@ilariac:您可以在查詢中添加FROM子句嗎? –

回答

2

這是你如何得到具有RECORD_TYPE值book的計數。

WITH t 
     AS (SELECT '<?xml version="1.0" encoding="UTF-8"?> 
         <record> 
         <record_number>12345</record_number> 
         <record_type> book </record_type> 
         </record>' 
         STRINGCLOB 
      FROM DUAL 
      UNION ALL 
      SELECT '<?xml version="1.0" encoding="UTF-8"?> 
          <record> 
          <record_number>6789</record_number> 
          <record_type> book </record_type> 
         </record>' 
         STRINGCLOB 
      FROM DUAL) 
SELECT COUNT (1) total 
    FROM t 
WHERE xmltype (t.STRINGCLOB).EXTRACT ('//record_type/text()') LIKE '%book%'; 

現在,如果你想加入與表2的基礎上,RECORD_ID

SELECT COUNT (1) total 
    FROM table1 t1, table2 t2 
    WHERE xmltype (t1.STRINGCLOB).EXTRACT ('//record_type/text()') LIKE 
      '%book%' 
     AND t1.record_id = t2.record_id 
     AND t1.DataSourceType = 'Source1' 
     AND (TRUNC (t2.timestamp) > '01-Nov-12' 
       AND TRUNC (t2.timestamp) < '01-Dec-12') 
     AND t2.clicktype <> 'Type1' 
+0

非常感謝你,這個作品非常漂亮! – paranza