Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle obtient un numérique DISTINCT avec un CLOB dans la requête

Si vous hachez le clob, vous pouvez l'utiliser dans une sous-requête pour récupérer le rowid maximum pour chaque eventid_nbr avec la même valeur de hachage clob. Ensuite, vous filtrez simplement votre table relation_two dans la clause where.

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);

Le 3 dans le HASH spécifié SHA, mais vous pouvez également utiliser MD4 (1) ou MD5 (2) si vous le souhaitez.

Je pense que cela pourrait être très lent si vous avez beaucoup de lignes dans la table RELATION_TWO et je suis sûr que cela peut être écrit pour mieux fonctionner, mais le concept est solide.