Lorsque je développe des programmes de structure BS, j'ai souvent besoin de traiter des données texte de grande capacité dans ORACLE, donc après des tests répétés, j'ai finalement utilisé ASP pour résoudre avec succès le problème de l'accès aux données texte volumineuses sous ORACLE.
1. Environnement opérationnel :
1. Microsoft Windows 2000 Serveur + IIS 5.0
2. Oracle8i édition standard chinoise
2. Créez un tableau de données :
CRÉER UN SYSTÈME DE TABLE.TEST(
BLOB LONG,
NUMÉRO D'IDENTIFICATION)
/
3. Programme source :
1. Programme de stockage de données : test.asp
<%
'Partie du traitement de la soumission du formulaire
'------------------------------------------------ -
Si requête(ok)=1 alors
'Fonction de conversion de caractères
fonction tansstr(sstr)
sstr=remplacer(sstr, , )
sstr=remplacer(sstr,chr(13) & chr(10),<br>)
tansstr=sstr
fonction de fin
'Soumettre l'affectation des données
a=lenb(requête(texte))
b=len(demande(texte))
c=tansstr(requête(texte))
'Ouvrez la base de données, ouvrez la table de données de test avec Rs comme jeu d'enregistrements
Définir OraSession=CreateObject(OracleInProcServer.XOraSession)
Définir OraDatabase=OraSession.DbOpenDatabase(autop,system/manager,0)
Définir rs=OraDatabase.CreateDynaset (sélectionner * dans l'ordre de test par identifiant desc,0)
'Trouver la valeur de l'ID
si rs.eof alors
identifiant=1
autre
identifiant=rs(id)+1
finir si
« Parce qu'elles sont limitées par la longueur des instructions SQL, les données sont stockées dans des instructions non SQL.
'------------------------------------------------ - ------
'Nouveau record
rs.DbAddNew
« Le classique est dans cette phrase : utilisez la méthode DbAppendChunk de l'objet Fields du jeu d'enregistrements RS pour gérer le problème du stockage de grands champs.
rs.Fields(blob).DbAppendChunk(c)
'Enregistrer la valeur de l'ID
rs(id)=id
'Actualiser le jeu d'enregistrements
rs.DbUpdate
'Afficher la section des résultats
'------------------------------------------------ - -------
Response.write Les données ont été stockées dans la base de données. <br>
Response.write nombre total de caractères occupés : & formatnumber(b,2,-2,-2,-1) & mots<br>
Response.write nombre total d'octets occupés : & formatnumber(a,2,-2,-2,-1) & Byte<br>
Response.write <a href='view.asp'>Veuillez lire...
'Fermez la connexion de données.
rs.fermer
définir rs = rien
Définir OraSession = rien
Réponse.end
Fin si
%>
<html>
<corps>
<form method=POST action=test.asp>
<p>Solution au problème d'accès aux grands champs Oracle en ASP :</p>
<p><textarea rows=13 name=text cols=104></textarea></p>
<p><input type=submit value=Enregistrer le nom=B1></p>
<type d'entrée=nom caché=valeur ok=1>
</form>
</corps>
</html>
2. Programme d'appel de données : view.asp
<%
'Connectez-vous à la base de données et ouvrez la table de données en mode lecture seule
Définir OraSession=CreateObject(OracleInProcServer.XOraSession)
Définir OraDatabase=OraSession.DbOpenDatabase(autop,system/manager,0)
Définir Rs=OraDatabase.DbCreateDynaset (sélectionner * dans l'ordre de test par ID desc,4)
'Attribuer une valeur initiale : définissez la taille en octets de chaque interception sur 1 024 octets, le maximum peut être défini sur 65 280 octets (64 Ko)
Taille=65280
je = 0
Faire
'Lire les données en boucle à l'aide de la méthode DbGetChunk de l'objet Fields du jeu d'enregistrements Rs
Text=Rs.Fields(Blob).DbGetChunk(I*Taille,Taille)
Réponse.écrire du texte
'Trouver le nombre détaillé d'octets de données supprimés à chaque fois
Text_Size=Lenb(Texte)
Je=Je+1
« Si le nombre détaillé d'octets de données extraits à chaque fois est inférieur à la taille d'octet intercepté à définir, cela signifie que la donnée est terminée et que la boucle est quittée.
Boucle jusqu'à Text_Size<Size
'Fermer la connexion de données
Définir OraSession = rien
%>
4. Post-scriptum :
Parce que le type de données est long, ORACLE stipule que la capacité de long est <2 Go. La méthode ci-dessus peut stocker du texte volumineux <2 Go. Cependant, j'ai constaté que lors de la lecture, je ne peux lire que le contenu maximum de 64 Ko. à l’influence des limitations de la méthode ASP ci-dessus.
Tout le monde, si vous avez plus d'expérience ou de meilleures solutions, faites-le nous savoir.