ASP-ORACLE "string literal too long"

ASP-ORACLE "string literal too long" - SQL/NoSQL - Programmation

Marsh Posté le 15-12-2003 à 18:50:23    

Bonjour a tous,
 
mouarf j'ai une question con histoire de changer un peu mais bon ...
 
donc voila dans ma table oracle j'ai un LONG malheureusement il semblerait que l'on ne puisse pas inserer des chaines de caracteres supérieurs a 4000 caracteres avec Oracle8
J'ai essaye avec un CLOB au lieu d'un long mais pareil .... "string literal too long"
 
en editant la colonne en passant par le "schema browser" de TOAD, j'arrive a depasser cette limite !
mais des que je fais un UPDATE (que ce soit par toad ou en asp) ca merde
 
C'est de l'asp 3 et je me connecte de la maniere suivante :
 
Set ConnexionOracle = Server.CreateObject("ADODB.Connection" )
 ConnexionOracle.Open "Provider=MSDAORA;Data Source=" & DB_DATA_SOURCE & ";User ID=" & DB_USER_ID & ";password=" & DB_PASSWORD
 
et je fais un update avec ma chaine tres longue en faisant un
ConnexionOracle.execute("update etc etc values ('chaine de plus de 4000 caracteres')" )
 
 
a ce que j'ai pu comprendre on doit passer le LONG en CLOB mais ca ne change rien :(
j'ai egalement vu un "bind" mais je ne comprend pas comment ca marche ?
Est ce qu'il est possible de concatener a la suite d'un fichier ? comme ca j'ai qu'a decouper mon texte en nx3000 que je concatene ....
seulement j'ai pas trouvé comment concatner avec UPDATE donc, la aussi je suis dans l'impasse et c'etait pourtant la seule facons que je voyais encore imaginable ....
 
s'il vous plait aidez moiiiiiiiiii !!!! :)
 
en tout cas, un enorme merci a celui qui pourra me depanner :p
 
Xc0r

Reply

Marsh Posté le 15-12-2003 à 18:50:23   

Reply

Marsh Posté le 15-12-2003 à 22:19:12    

snif :(
 
allez :bounce: on sait jamais :p

Reply

Marsh Posté le 16-12-2003 à 09:03:57    

Pourquoi ne pas utilisé un VARCHAR2 (max 16238 caratère) au lien d'un LONG? De plus l'utilisation du LONG est devenue totalement obsolète avec les BLOB et les CLOB

Reply

Marsh Posté le 16-12-2003 à 11:49:07    

ben je veux bien moi mettre un varchar2 ou meme un CLOB mais ca me fait exactement pareil ...
et j'arrive pas a creer un varchar2 de plus de 4000 caracteres non plus
 
personne n'a jamais inserer plus de 4000 caracteres sous un sgbd ou je suis vraiment si si mauvais que ca ? :) bon ok ok je suis mauvais mais bon je suis bloqué la :(

Reply

Marsh Posté le 16-12-2003 à 12:22:21    

Voilà pour toi:
 
http://support.microsoft.com/defau [...] bContent=1
 
En tout cas t'as pas de bolle :D


---------------
Si tu regardes ce que le canard mange, tu ne mangeras pas de canard.
Reply

Marsh Posté le 16-12-2003 à 12:52:15    

oui j'avais lu cette bc mais ....  
ca veut pas dire que je peux pas le faire non ?
c'est pas possible que ce ne soit pas possible ?
je ne pense pas qu'il n'y ait aucune bdd oracle dans le monde avec un champ sup a 4000 caracteres ?
 
je vais me petit suicider sinon snif

Reply

Marsh Posté le 16-12-2003 à 16:21:25    

Je viens de faire un test, 4000 caractères dans un VARCHAR2(4000) sa rentre.


---------------
Si tu regardes ce que le canard mange, tu ne mangeras pas de canard.
Reply

Marsh Posté le 16-12-2003 à 17:35:57    

merci beaucoup thecoin d'avoir consacré du tps a mon pb!
bon je pense etre sur le point de le resoudre en fait :
j'ai donc mis un CLOB a la place du LONG et je fais un append ... (je savais mm pas que c'etait faisable, en fait je viens de decouvrir OO4O!)
 
donc pour ceux que ca interesse, je met une copie du code :
 

Code :
  1. <%
  2.   Dim varOraSession
  3.   Dim varOraDatabase
  4.   Dim varOraDynaset
  5.   Dim varSQL
  6.   dim strSQL
  7.   dim intMaxlength
  8.   dim strContent
  9.   strContent = "012345678901234567890123456789012"
  10.   Set varOraSession = Server.CreateObject("OracleInProcServer.XOraSession" )
  11.   Set varOraDatabase = varOraSession.OpenDatabase("MABASECOM", _
  12.                                                   "scott/tiger", 0)
  13. varOraSession.beginTrans
  14.   Response.Write "OO4O Version:" & varOraSession.OIPVersionNumber & "<BR>" &_
  15.                  "Connect: " & varOraDatabase.connect & "<BR>" & _
  16.                  "DatabaseName: " & varOraDatabase.DatabaseName & "<BR>" & _
  17.                  "Oracle Version: " & varOraDatabase.RDBMSVersion & "<P>"
  18. if len(strContent) > 4000 then
  19. strSQL="UPDATE DEPT " & _
  20.            "SET CONT='" & left(strContent, 3999) & "' where DEPTNO='10'"
  21. else
  22. strSQL="UPDATE DEPT " & _
  23.            "SET CONT='" & left(strContent, 3999) & "' where DEPTNO='10'"
  24. end if
  25. varOraDatabase.executeSQL(strSQL)
  26. ' on concatene a la suite
  27. dim rsAppend
  28. dim intCount
  29. dim intStartChunk
  30. intMaxLength=int(len(strContent)\4000)
  31. strSQL="SELECT CONT FROM DEPT WHERE DEPTNO='10'"
  32. set rsAppend=varOraDatabase.CreateDynaset(strSQL, 0)
  33. rsAppend.edit
  34. for intCount=1 to intMaxLength
  35.         intStartChunk=4000*intCount
  36.         rsAppend.fields("CONT" ).appendChunk(mid(strContent, intStartChunk, 4000))
  37.     next
  38.     rsAppend.update
  39.     rsAppend.close
  40.     set rsAppend=nothing
  41. varOraSession.CommitTrans
  42. Set varOraDatabase = Nothing
  43. Set varOraDynaset = Nothing
  44. Set varOraSession = Nothing
  45. %>


 
apparement il est possible de faire ca avec un BIND aussi (que je viens de decouvrir aussi lol) et ca a l'air pas mal faudrait que je me penche sur le pb, mais la j'ai pris trop de retard!
 
Merci bcp en tout cas :)

Reply

Marsh Posté le 17-12-2003 à 18:55:43    

Il faut passer par une connection OLE.
 
Ou inserrer des blocs de 4000 caractères, en faisant :
 
update table set champ = champ + 'blablabla'

Reply

Sujets relatifs:

Leave a Replay

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