Oracle : type LONG : pb de concaténation

Eléphant du PHP | 441 Messages

21 août 2006, 16:12

Bonjour à tous,
je suis face à une erreur oracle qui me laisse perplexe.

J'essaie d'updater une colonne de type LONG en la concaténant dynamiquement.
Exemple:

Code : Tout sélectionner

UPDATE MESSAGE SET CONTENU = CONTENU || 'suite du message' WHERE ETA_CODE IS NULL;
Et Oracle me jette avec cette erreur:

Code : Tout sélectionner

ORA-00932: types de données incohérents : NUMBER attendu ; LONG obtenu
Or le type LONG est une chaine de caractères!!
:?

Sachant que j'utilise cette méthode de concaténation sans arrêt, avec d'autres types et tjs avec succès.

Avez-vous déjà rencontré ce pb et auriez vous une quelconque explication??
:roll:
Futures Stars par ici >> www.apel-doorn.com
fan d'info et du ... PSG !! :D
Apprendre, comprendre et maîtriser telle est ma devise!
Fan inconditionnel de netvibes

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

21 août 2006, 17:12

Est-ce que tu as fait un DESCRIBE table pour voir que le format de cette colonne est bien un long ?

le sujet aurait plus sa place dans le forum SQL :arrow: sujet déplacé ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 441 Messages

21 août 2006, 17:25

le sujet aurait plus sa place dans le forum SQL :arrow: sujet déplacé ;)
Oui désolé c'est la fatigue, j'ai pas cliqué sur le bon forum
:wink:
Est-ce que tu as fait un DESCRIBE table pour voir que le format de cette colonne est bien un long ?
Oui je suis sous TOAD et le format de la colonne est bien un LONG. D'ailleurs j'ai déjà une interface qui permet d'alimenter cette table et j'insère et je met à jour avec du texte...
il n'ya que cette concaténation qui ne veut pas se faire.
Futures Stars par ici >> www.apel-doorn.com
fan d'info et du ... PSG !! :D
Apprendre, comprendre et maîtriser telle est ma devise!
Fan inconditionnel de netvibes

Eléphant du PHP | 441 Messages

23 août 2006, 17:26

Bon d'après des collègues...ce n'est pas ppossible car c'est du binaire...
mais bon à vérifier.
Futures Stars par ici >> www.apel-doorn.com
fan d'info et du ... PSG !! :D
Apprendre, comprendre et maîtriser telle est ma devise!
Fan inconditionnel de netvibes

Eléphant du PHP | 332 Messages

23 août 2006, 17:59

Le type LONG est essentiellement utilisé pour stocker des données textuelles de type VARCHAR2, mais en plus long.

Oracle recommande de ne plus utiliser ce type et d'utiliser à la place BLOB, CLOB ou NCLOB (Do not create tables with LONG columns. Use LOB columns (CLOB, NCLOB, BLOB) instead. LONG columns are supported only for backward compatibility. Oracle also recommends that you convert existing LONG columns to LOB columns. LOB columns are subject to far fewer restrictions than LONG columns. Further, LOB functionality is enhanced in every release, whereas LONG functionality has been static for several releases. -- Doc Oracle 10g). Tu peux éventuellement utiliser la fonction TO_LOB pour convertir.

De même avec les types RAW et LONG RAW (stockage de binaires)qui ne doivent plus être utilisés.

Pour stocker le contenu de ton message, il faut donc que tu utilises un CLOB ou NCLOB (codage Unicode). Je viens de vérifier à l'instant : la concaténation d'un CLOB avec une chaîne de caractères fonctionne.

Eléphant du PHP | 441 Messages

24 août 2006, 09:37

Merci Henri ! :pouce:
Futures Stars par ici >> www.apel-doorn.com
fan d'info et du ... PSG !! :D
Apprendre, comprendre et maîtriser telle est ma devise!
Fan inconditionnel de netvibes