Utiliser un CLOB comme champ texte ?
Bonjour a tous,
Tout d'abord je tiens a preciser que c'est la premiere fois que j'utilise les LOB avec Oracle.
Je suis en train de creer une couche d'abstraction de BDD pour un CMS afin de l'utiliser avec Oracle, je m'aide donc de l'existant (fonctionnant avec MySQL et Postgre) pour creer cette couche.
Cependant je me heurte a un probleme de taille, la gestion des colonnes de type "text" (longtext etc).
Logiquement, vu la limite des varchar2 a 4000 caracteres, je me suis mis a utiliser des CLOBs. Malheureusement je les trouve assez contraignants.
Tout d'abord il est impossible de les mettre dans des clauses d'agroupement (GROUP BY, DISTINCT), cela me retourne une erreur 932 d'inconsistence de type - d'ailleurs la doc precise que ce n'est pas possible...
Ensuite, je fais face a la limite de 4000 caracteres pour l'insertion dans un CLOB. En gros je ne peux pas faire ca :
Code:
1 2 3
| UPDATE ma_table
SET mon_clob = 'tres long texte'
WHERE id = 1 |
Où tres long text fait plus de 4000 caracteres.
Enfin, il n'est pas possible de faire la requete suivante :
Code:
1 2 3
| SELECT *
FROM ma_table
WHERE mon_clob = 'mon texte' |
Il faut que je convertisse mon clob en utilisant TO_CHAR et evidemment il ne faut pas que "mon texte" depasse la limite des 4000 caracteres.
Pour surpasser cette limite, je suis oblige de lier (bind) mon_clob a une variable externe (oci_bind_by_name en php) ce qui est assez deplaisant a faire.
Bref voila le genre de limitations auquelles je me trouve confronte. Sachant que je ne les rencontre pas avec les colonnes texte de MySQL et Postgre et je me demande bien comment je pourrais les surmonter afin d'avoir un code uniforme pour chacune des mes couches d'abstraction (rien que l'histoire des variables liees me donne des boutons...) ?