Insérer du texte dans BD oracle

Insérer du texte dans BD oracle - PHP - Programmation

Marsh Posté le 12-12-2003 à 12:00:57    

Bonjour,
 
Je voudrais insérer du texte dans un champ VARCHAR2 d'une BD Oracle mais j'obtiens le message d'erreur suivant :
"OCIStmExecute: ORA-01461: une valeur 'LONG' ne peut être liée que dans une colonne de type 'LONG'"
 
Est ce que quelqu'unà déja eu le même type de pb ?  
Je ne sais pas s'il y a moyen avec PHP que je fasse une conversion de mon texte avant de l'inserer dans la BD ou s'il faut carrémment que je change le type de mon champ VARCHAR2 ?
 
Merci

Reply

Marsh Posté le 12-12-2003 à 12:00:57   

Reply

Marsh Posté le 12-12-2003 à 13:06:25    

Et en fait ajoutant TO_CHAR(ta_variable) ?

Reply

Marsh Posté le 12-12-2003 à 14:14:07    

Vinx a écrit :

Et en fait ajoutant TO_CHAR(ta_variable) ?


 
J'ai vu sur le net que j'étais obligé d'utiliser un CLOB pour insérer mon texte. Par contre ça ne marche pas non plus j'ai toujours le même message d'erreur  
 
Voici mon code :  
$update = OCIParse($conn,"UPDATE pages SET pa_texte= :texte where Ru_ID=$ru_id" );  
OCIBindByName($update,":texte",&$texte,-1);  
OCIExecute($page);

Reply

Marsh Posté le 12-12-2003 à 14:59:30    

Et un simple :
$update = OCIParse($conn,"UPDATE pages SET pa_texte= '$texte' where Ru_ID=$ru_id" );  
OCIExecute($page);
Cà ne marche pas ?
 
 
Sans oublier les ' autour de $texte...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 12-12-2003 à 15:01:09    

Heu au fait ce serait pas plutôt OCIExecute($update); à la plade de OCIExecute($page); ? ? ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 12-12-2003 à 15:11:37    

Mara's dad a écrit :

Heu au fait ce serait pas plutôt OCIExecute($update); à la plade de OCIExecute($page); ? ? ?


 
Si si c'est une erreur de frappe de ma part

Reply

Marsh Posté le 12-12-2003 à 15:21:09    

Résultat ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 12-12-2003 à 15:25:55    


 
mon code était "bon" si on peut dire :) c'etait mon post qui ne l'était pas donc résultat ça ne marche toujours pas
 
j'ai essayé autre chose mais cela insère un champ vide dans ma base
$lob = OCINewDescriptor($connect, OCI_D_LOB);
$sql= "UPDATE pages SET Pa_Texte=EMPTY_CLOB() WHERE Ru_ID=$ru_id RETURNING Pa_Texte INTO :texte";
$page = OCIParse($connect, $sql);
OCIBindByName($page, ":texte", &$lob, -1, OCI_B_CLOB);
OCIExecute($page,OCI_DEFAULT);
OCICommit($page);

Reply

Marsh Posté le 12-12-2003 à 15:39:07    

Ton $lob, il est si gros que çà ?
Quelle taille exactement ?
Je croyais que c'était un VARCHAR2 ton champs ! Limité à 255 quoi.
 
Le returning, c'est pas utilisé pour mettre à jour ton champs. C'est utilisé pour récupérer un champs autoincrémenté par exemple par un trigger ou pour un rowid.
 
T'es certain que tu dois utiliser un CLOB, parce-que c'est méga-chiant ce truc. Doc : DBMS_LOB.WRITE :/


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 12-12-2003 à 15:46:10    

ben mon champ j'ai été obligé de la passer en CLOB car mon texte est très long

Reply

Marsh Posté le 12-12-2003 à 15:46:10   

Reply

Marsh Posté le 12-12-2003 à 15:56:44    

Ben t'as plus qu'à chercher des exemples d'utilisation du package DBMS_LOB :/


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 12-12-2003 à 15:58:49    

les exemples que j'ai trouvés quand j'essaye de les appliquer ça ne marche pas :(
 
Merci quand même

Reply

Marsh Posté le 12-12-2003 à 16:09:41    

Code :
  1. declare
  2. clobloc  CLOB;
  3.  buf  VARCHAR2(100) := ?some data?;
  4. begin
  5. select clobcol into clobloc from table for update;
  6. dbms_lob.open(clobloc, dbms_log.lob_readwrite);
  7. dbms_lob.write(clobloc, 100, 1, buf);
  8. dbms_lob.close(clobloc);
  9.  commit;
  10. end;


 
http://www.sloug.org/presentations [...] Stange.ppt


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 12-12-2003 à 16:19:53    

Arf, j'ai vu les exemples avec returning...
 

Code :
  1. $sql = "UPDATE sometable SET lob_col = EMPTY_LOB() WHERE key_col = $key RETURNING lob_col INTO :lob";
  2. $stmt = OCIParse($conn,$sql);
  3. $lob = OCINewDescriptor($conn,OCI_D_LOB);
  4. OCIBindByName($stmt,':lob',&$lob,-1,OCI_B_BLOB);
  5. OCIExecute($stmt,OCI_DEFAULT);
  6. $lob->save($sometext);
  7. $lob->free();


 
T'as quoi comme erreur ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed