Insertion d'un clob dans une table oracle PHP

Fermé
bfiguig - 12 janv. 2010 à 15:49
 Frosty - 10 avril 2012 à 10:45
Bonjour,
Voila je veux inserer des données dans une table oracle et dans cette table il ya une colonne de type CLOB.
quand j'insere mes données, il y a ce message qui s'affiche :

" ORA-01704: string literal too long in "

et cette erreur est en relation avec la colonne de type CLOB.

Je suis bloqué et j'espere que quelqu'un pourra m'aider pour resoudre ce probleme.

je precise que le type CLOB c'est pour inserer jusqu'à 4Go et le texte que j'essaye d'inserer ne fait que 1600 caractères.

merci de votre aide precieuse.
A voir également:

3 réponses

chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
12 janv. 2010 à 19:16
Salut,
c'est quelle version d'oracle?
T'as la requete qui va avec et la structure de la table?
Tu as essayé de faire un TO_CLOB("ta_valeur_de_chaine")?
@+
0
Bonjour et merci de ta reponse

j'utilise 10g

voici la requete que j'utilise pour une insertion :

$stmt_insert_journal = OCIParse($conn, "INSERT INTO JOURNAL_PROJET (ID_EVENEMENT, DATE_EVENEMENT, ID_REDACTEUR, ID_CDP1, ID_CDP2, ID_DBA1, ID_DBA2, TEXTE_EVENEMENT, ID_PROJET) VALUES ('".$RES_EVEN."', sysdate, '".$id_redacteur."', '".$id_cdp1."', '".$id_cdp2."', '".$id_dba1."', '".$id_dba2."', '".$descr_even."', '".$id_projet."')");

et c'est ça le champ qui m'interesse : $descr_even
comment dois-je utiliser le TO_CLOB en PHP
je voulais t'envoyer une image de la structure de la table mais je ne sais pas comment faire
merci de ton aide
0
chuka Messages postés 965 Date d'inscription samedi 11 octobre 2008 Statut Membre Dernière intervention 29 juillet 2010 378
13 janv. 2010 à 19:49
Salut,
j'ai fait un truc bidon comme ci-dessus et ca a marché...
<?php
$connect = ocilogon("user","pass","mon_instance");
if ( ! $connect )
{
echo "Unable to connect: " . var_dump( OCIError() );
die();
}
for ($i=0;$i<1600;$i++)
$data.="1";
$query="insert into test1 (monclob) values (to_clob('".$data."'))"; //marche aussi sans le to_clob....
$stmt = ociparse($connect,$query);
OCIExecute($stmt);
?>
essaye peut-etre de creer une variable intermediaire....pour le OCIParse...
0
Pour éviter cette erreur il faut "binder" la valeur du champ de type CLOB à la requête. Utiliser pour cela oci_bind() avant de faire les oci_parse() et oci_execute() (exemples dans le manuel PHP)

Voir aussi :
http://www.dba-oracle.com/t_ora_01704_string_literal_too_long.htm
https://forums.oracle.com/forums/thread.jspa?threadID=1066414
0