编辑:在查询中包含CLOB时,我正在寻找DISTINCT NUMERIC
。
我有两个关系。
关系一:
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 :(得分: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);
HASH中的3指定了SHA,但如果您愿意,也可以使用MD4(1)或MD5(2)。
我认为如果RELATION_TWO表中有很多行,这可能会非常慢,我确信这可以写得更好,但概念是合理的。