Wenn ich BS-Strukturprogramme entwickle, muss ich häufig Textdaten mit großer Kapazität in ORACLE verarbeiten. Nach wiederholten Tests habe ich schließlich ASP verwendet, um das Problem des Zugriffs auf große Textdaten unter ORACLE erfolgreich zu lösen.
1. Betriebsumgebung:
1. Microsoft Windows 2000 Server + IIS 5.0
2. Oracle8i Chinese Standard Edition
2. Erstellen Sie eine Datentabelle:
TABELLE ERSTELLEN SYSTEM.TEST(
BLOB LANG,
ID-NUMMER)
/
3. Quellprogramm:
1. Datenspeicherprogramm: test.asp
<%
'Teil der Verarbeitung der Formularübermittlung
'------------------------------------------------ -
Wenn request(ok)=1 dann
'Zeichenkonvertierungsfunktion
Funktion tansstr(sstr)
sstr=replace(sstr, , )
sstr=replace(sstr,chr(13) & chr(10),<br>)
tansstr=sstr
Endfunktion
'Datenzuordnung absenden
a=lenb(Anfrage(Text))
b=len(Anfrage(Text))
c=tansstr(Anfrage(Text))
'Öffnen Sie die Datenbank, öffnen Sie die Testdatentabelle mit Rs als Datensatz
OraSession=CreateObject(OracleInProcServer.XOraSession) festlegen
Setze OraDatabase=OraSession.DbOpenDatabase(autop,system/manager,0)
Setze rs=OraDatabase.CreateDynaset(select * from test order by id desc,0)
'Finden Sie den ID-Wert
wenn rs.eof dann
id=1
anders
id=rs(id)+1
Ende wenn
„Da die Länge der SQL-Anweisungen begrenzt ist, werden Daten in Nicht-SQL-Anweisungen gespeichert.“
'------------------------------------------------ - ------
„Neuer Rekord
rs.DbAddNew
„Der Klassiker ist in diesem Satz: Verwenden Sie die DbAppendChunk-Methode des Fields-Objekts des RS-Datensatzes, um das Problem der großen Feldspeicherung zu lösen.“
rs.Fields(blob).DbAppendChunk(c)
'ID-Wert speichern
rs(id)=id
'Aktualisieren Sie den Datensatz
rs.DbUpdate
'Ergebnisbereich anzeigen
'------------------------------------------------ - -------
Response.write Die Daten wurden in der Datenbank gespeichert. <br>
Response.write Gesamtzahl der belegten Zeichen: & Formatnummer(b,2,-2,-2,-1) & Wörter<br>
Response.write Gesamtzahl der belegten Bytes: & formatnumber(a,2,-2,-2,-1) & Byte<br>
Response.write <a href='view.asp'>Bitte lesen...
'Schließen Sie die Datenverbindung.
rs.close
setze rs=nichts
Legen Sie OraSession=nothing fest
Antwort.Ende
Ende wenn
%>
<html>
<Körper>
<form method=POST action=test.asp>
<p>Lösung für das Problem des Zugriffs auf große Oracle-Felder in ASP:</p>
<p><textarea rows=13 name=text cols=104></textarea></p>
<p><input type=submit value=Save name=B1></p>
<Eingabetyp=verborgener Name=OK-Wert=1>
</form>
</body>
</html>
2. Datenaufrufprogramm: view.asp
<%
'Stellen Sie eine Verbindung zur Datenbank her und öffnen Sie die Datentabelle im schreibgeschützten Modus
OraSession=CreateObject(OracleInProcServer.XOraSession) festlegen
Setze OraDatabase=OraSession.DbOpenDatabase(autop,system/manager,0)
Setze Rs=OraDatabase.DbCreateDynaset(select * from test order by id desc,4)
'Anfangswert zuweisen: Definieren Sie die Bytegröße jedes Abfangens als 1024 Byte. Das Maximum kann auf 65280 Byte (64 KB) eingestellt werden.
Größe=65280
I=0
Tun
'Lesen Sie Daten in einer Schleife mit der DbGetChunk-Methode des Fields-Objekts des Rs-Datensatzes
Text=Rs.Fields(Blob).DbGetChunk(I*Size,Size)
Response.write Text
„Ermitteln Sie die detaillierte Anzahl der jeweils entnommenen Datenbytes.“
Text_Size=Lenb(Text)
I=I+1
„Wenn die detaillierte Anzahl der jedes Mal entnommenen Datenbytes kleiner als die zu definierende abgefangene Bytegröße ist, bedeutet dies, dass das Datenelement abgeschlossen wurde und die Schleife verlassen wird.“
Schleife bis Text_Size<Size
'Datenverbindung schließen
Legen Sie OraSession=nothing fest
%>
4. Nachtrag:
Da der Datentyp lang ist, legt ORACLE eine Kapazität von <2 GB fest. Ich habe jedoch festgestellt, dass ich beim Lesen nur den maximalen Inhalt von 64 KB lesen kann auf den Einfluss der oben genannten ASP-Einschränkungen.
Wenn Sie mehr Erfahrung oder bessere Lösungen haben, lassen Sie es uns bitte wissen.