Ketika saya mengembangkan program struktur BS, saya sering kali perlu memproses beberapa data teks berkapasitas besar di ORACLE, jadi setelah pengujian berulang kali, saya akhirnya menggunakan ASP untuk berhasil menyelesaikan masalah akses data teks besar di bawah ORACLE.
1. Lingkungan pengoperasian:
1.Microsoft windows 2000 Server + IIS 5.0
2. Oracle8i Edisi Standar Cina
2. Buat tabel data:
BUAT SISTEM TABEL.UJI(
gumpalan panjang,
NOMOR ID)
/
3. Sumber program:
1. Program penyimpanan data: test.asp
<%
'Bagian pemrosesan pengiriman formulir
'------------------------------------------------ -
Jika permintaan(ok)=1 maka
'Fungsi konversi karakter
fungsi tansstr(sstr)
sstr=ganti(sstr, , )
sstr=ganti(sstr,chr(13) & chr(10),<br>)
tansstr=sstr
fungsi akhir
'Kirim tugas data
a=lenb(permintaan(teks))
b=len(permintaan(teks))
c=tansstr(permintaan(teks))
'Buka database, buka tabel data pengujian dengan Rs sebagai kumpulan catatannya
Setel OraSession=CreateObject(OracleInProcServer.XOraSession)
Setel OraDatabase=OraSession.DbOpenDatabase(autop,sistem/manager,0)
Setel rs=OraDatabase.CreateDynaset(pilih * dari urutan pengujian berdasarkan id desc,0)
'Temukan nilai ID
jika rs.eof maka
nomor identitas=1
kalau tidak
id=rs(id)+1
berakhir jika
'Karena dibatasi oleh panjang pernyataan SQL, data disimpan dalam pernyataan non-SQL.
'------------------------------------------------ - ------
'Rekor baru
rs.DbAddNew
'Yang klasik dalam kalimat ini: Gunakan metode DbAppendChunk dari objek Fields dari kumpulan data RS untuk menangani masalah penyimpanan lapangan yang besar.
rs.Fields(gumpalan).DbAppendChunk(c)
'Simpan nilai ID
rs(id)=id
'Segarkan kumpulan rekor
rs.DbUpdate
'Tampilkan bagian hasil
'------------------------------------------------ - -------
Response.write Data telah disimpan di database. <br>
Response.tulis jumlah total karakter yang ditempati: & formatnumber(b,2,-2,-2,-1) & kata<br>
Response.tulis jumlah total byte yang ditempati: & formatnumber(a,2,-2,-2,-1) & Byte<br>
Response.write <a href='view.asp'>Harap dibaca...
'Tutup koneksi data.
rs.tutup
atur rs=tidak ada
Tetapkan OraSession=tidak ada
Respon.akhir
Akhiri Jika
%>
<html>
<tubuh>
<metode formulir=tindakan POST=tes.asp>
<p>Solusi untuk masalah mengakses bidang besar Oracle di ASP:</p>
<p><textarea row=13 nama=text cols=104></textarea></p>
<p><input type=kirim nilai=Simpan nama=B1></p>
<tipe masukan=nama tersembunyi=nilai oke=1>
</bentuk>
</tubuh>
</html>
2. Program pemanggilan data: view.asp
<%
'Hubungkan ke database dan buka tabel data dalam mode baca-saja
Setel OraSession=CreateObject(OracleInProcServer.XOraSession)
Setel OraDatabase=OraSession.DbOpenDatabase(autop,sistem/manager,0)
Setel Rs=OraDatabase.DbCreateDynaset(pilih * dari urutan pengujian berdasarkan id desc,4)
'Tetapkan nilai awal: tentukan ukuran byte setiap intersepsi sebagai 1024byte, maksimum dapat diatur ke 65280byte (64K)
Ukuran=65280
saya=0
Melakukan
'Baca data dalam satu lingkaran menggunakan metode DbGetChunk dari objek Fields dari kumpulan data Rs
Teks=Rs.Fields(Blob).DbGetChunk(I*Ukuran,Ukuran)
Respon.tulis Teks
'Temukan jumlah detail byte data yang diambil setiap kali
Text_Size=Lenb(Teks)
saya=saya+1
'Jika jumlah detail byte data yang diambil setiap kali kurang dari ukuran byte yang dicegat yang akan ditentukan, itu berarti bahwa bagian data telah selesai dan loop keluar.
Ulangi hingga Text_Size<Ukuran
'Tutup koneksi data
Tetapkan OraSession=tidak ada
%>
4. Catatan tambahan:
Karena tipe datanya panjang, ORACLE menetapkan bahwa kapasitas panjangnya adalah <2GB. Cara di atas dapat menyimpan teks berukuran besar <2GB. Namun, saya menemukan bahwa saat membaca, saya hanya dapat membaca konten maksimal 64K pengaruh metode di atas keterbatasan.
Semuanya, jika Anda memiliki lebih banyak pengalaman atau solusi yang lebih baik, beri tahu kami.