Généralement, ce genre de problème relève plus d'un défaut de conception plutot qu'un défaut de langage...
Il faut voir les LOB comme des objets à part entières. Il ne sont généralement pas dans le même espace que la table elle même, ils ne réagissent pas de la même manière que les autres types de colonnes et c'est bien normal.
Je m'imagine mal faire une recherche dans une table de 5 millions d'enregistrements contenant chacune un CLOB de quelques megs, en mettant comme seule condition de recherche
CLOB = 'texte très très très long'
Le résultat prendrait 360 millions d'années à sortir et le commentaire serait probablement que qu'ORACLE ne sort pas de résultats dans des délais raisonnables...
L'idéal est d'utiliser ORACLE TEXT pour la recherche. Sinon, des procédure existantes dans DBMS_LOB (instr, par exemple) peuvent vous aider à y faire des recherches, mais généralement, pas sur toute la table, il faut mettre au moins un filtre restrictif sur d'autres colonnes de la table afin de ne pas tomber en full scan.
Pour ce qui est de les mettres dans des group by, encore une fois, c'est pas normal d'avoir à mettre un LOB dans un disctinct ou un group by... Probablement un défaut de solution.
Pour faire de l'update, il faut passer par une procédure PL/SQL, avec un update et une variable afin de pouvoir mettre à jour ces types de données.
Je remarque que vous désirez faire ceci via PHP. Je ne peux pas vous aider pour cette partie, désolé.
Partager