2014-06-12 52 views
1

編輯:我正在查找DISTINCT NUMERIC,同時在查詢中包含CLOB。Oracle在查詢中獲得帶有CLOB的DISTINCT數字

我有兩個關係。

關係的一個:

LOGID_NBR   NUMBER (12) 
APPID_NBR   NUMBER (2)  
EVENTID_NBR   NUMBER (10)  
KEYID_NBR   NUMBER (8)  
KEYVALUE   VARCHAR2 (100 Byte)  
ARGUMENTSXML  VARCHAR2 (4000 Byte)  
SENTINDICATOR  CHAR (5 Byte)  
RECEIVED_DATEDATE   DATE sysdate  
LAST_UPDATED  DATE sysdate 
TEXTINDICATOR  VARCHAR2 (5 Byte)  
UPSELL_ID   VARCHAR2 (5 Byte)  
GECKOIMAGEIND  CHAR (1 Byte)  
DELIVERYTYPE  VARCHAR2 (30 Byte)  

關係的兩個:

LOGID_NBR  NUMBER (12)  
INPUT_ARGS  CLOB  

我質疑的關係如下:

SELECT EVENTID_NBR, INPUT_ARGS 

FROM RELATION_ONE, RELATION_TWO 

WHERE RELATION_ONE.LOGID_NBR = RELATION_TWO.LOGID_NBR AND 
    EVENTID_NBR BETWEEN 143 AND 192 AND 
    EVENTID_NBR != 172 AND SYSDATE - 7 >= RELATION_ONE.LAST_UPDATED 
    ORDER BY EVENTID_NBR; 

我收到了我的結果設置得相同EVENTID_NBR往往只對DISTINCT結果感興趣。然而,加入DISTINCT關鍵字查詢,如:

SELECT DISTINCT EVENTID_NBR, INPUT_ARGS ... 

產生以下錯誤結果:

[Error] Execution (8: 32): ORA-00932: inconsistent datatypes: expected - got CLOB 

於是,我開始搜索網如何解決這個問題,發現this甚至this。我將這個CLOB轉換成了什麼樣的結果,使DISTINCT EVENTID_NBR及其關聯的CLOB能夠出現在我的結果集中?

+0

重複應該讓你進一步瞭解如何獲得DISTINCT數據集。但是,我會重新考慮這是否是問題所在,如果您首先需要DISTINCT,那麼就可以解決問題。難道你的數據庫是不正確的正常化? – Ben

+0

@我需要一個獨特的因爲每個'EVENTID_NBR'都有一個不同的'CLOB'。因此,我可能有一百個'EVENTID_NBR = 143',但每個都有一個不同的CLOB,因此,我只對'DISTINCT'對感興趣。 – Mushy

+0

因此,對於單個eventid_nbr,您有一堆不同的input_args(CLOB)值,並且在同一個eventid_nbr中某些input_args是相同的? – Bob

回答

0

如果散列clob,則可以在子查詢中使用它來獲取具有相同clob散列值的每個eventid_nbr的最大rowid。然後你只需在where子句中過濾你的relation_two表。

SELECT EVENTID_NBR, INPUT_ARGS 

FROM RELATION_ONE, RELATION_TWO 

WHERE RELATION_ONE.LOGID_NBR = RELATION_TWO.LOGID_NBR AND 
    EVENTID_NBR BETWEEN 143 AND 192 AND 
    EVENTID_NBR != 172 AND SYSDATE - 7 >= RELATION_ONE.LAST_UPDATED 

    AND (RELATION_TWO.EVENTID_NBR, RELATION_TWO.ROWID) IN 
     (SELECT DISTINCT EVENTID_NBR, 
     MAX(ROWID) OVER (PARTITION BY EVENTID_NBR, DBMS_HASH(INPUT_ARGS,3)) 
     FROM RELATION_TWO); 

3在HASH中指定了SHA,但如果你喜歡,也可以使用MD4(1)或MD5(2)。

我想這可能會非常緩慢,如果你有很多行在RELATION_TWO表中,並且我確信這可以寫得更好,但概念是健全的。