เมื่อฉันพัฒนาโปรแกรมโครงสร้าง BS ฉันมักจะต้องประมวลผลข้อมูลข้อความความจุสูงใน ORACLE ดังนั้นหลังจากการทดสอบซ้ำแล้วซ้ำเล่า ในที่สุดฉันก็ใช้ ASP เพื่อแก้ไขปัญหาการเข้าถึงข้อมูลข้อความขนาดใหญ่ภายใต้ ORACLE ได้สำเร็จ
1. สภาพแวดล้อมการทำงาน:
1. ไมโครซอฟต์วินโดว์ 2000 เซิร์ฟเวอร์ + IIS 5.0
2. Oracle8i ฉบับมาตรฐานภาษาจีน
2. สร้างตารางข้อมูล:
สร้างระบบตาราง.TEST(
หยดยาว
หมายเลขประจำตัว)
-
3. โปรแกรมต้นทาง:
1. โปรแกรมจัดเก็บข้อมูล : test.asp
-
'ส่วนการประมวลผลการส่งแบบฟอร์ม'
'------------------------------------------------ -
ถ้า request(ok)=1 แล้ว
'ฟังก์ชั่นการแปลงตัวละคร
ฟังก์ชั่น tansstr(sstr)
sstr=แทนที่(sstr, , )
sstr=แทนที่(sstr,chr(13) & chr(10),<br>)
tansstr=sstr
ฟังก์ชั่นสิ้นสุด
'ส่งข้อมูลการมอบหมาย
a=lenb(คำขอ(ข้อความ))
b=len(คำขอ(ข้อความ))
c=tansstr(คำขอ(ข้อความ))
'เปิดฐานข้อมูล เปิดตารางข้อมูลทดสอบโดยมี Rs เป็นชุดบันทึก
ตั้งค่า OraSession=CreateObject(OracleInProcServer.XOraSession)
ตั้งค่า OraDatabase=OraSession.DbOpenDatabase(autotop,system/manager,0)
ตั้งค่า rs=OraDatabase.CreateDynaset(select * from test order by id desc,0)
'ค้นหาค่า ID
ถ้า rs.eof แล้ว
รหัส=1
อื่น
id=rs(id)+1
สิ้นสุดถ้า
'เนื่องจากมันถูกจำกัดด้วยความยาวของคำสั่ง SQL ข้อมูลจึงถูกจัดเก็บไว้ในคำสั่งที่ไม่ใช่ SQL
'------------------------------------------------ - ------
'บันทึกใหม่
rs.DbAddNew
'ความคลาสสิกอยู่ในประโยคนี้: ใช้วิธี DbAppendChunk ของอ็อบเจ็กต์ Fields ของชุดเร็กคอร์ด RS เพื่อจัดการกับปัญหาพื้นที่จัดเก็บข้อมูลขนาดใหญ่
rs.Fields(หยด).DbAppendChunk(c)
'บันทึกค่า ID
อาร์เอส(id)=id
'รีเฟรชชุดบันทึก
rs.DbUpdate
'ส่วนแสดงผล
'------------------------------------------------ - -------
Response.write ข้อมูลถูกจัดเก็บไว้ในฐานข้อมูล <br>
Response.write จำนวนอักขระทั้งหมดที่ถูกครอบครอง: & formatnumber(b,2,-2,-2,-1) & word<br>
Response.write จำนวนไบต์ทั้งหมดที่ถูกครอบครอง: & formatnumber(a,2,-2,-2,-1) & Byte<br>
Response.write <a href='view.asp'>โปรดอ่าน...
'ปิดการเชื่อมต่อข้อมูล
RS.ปิด
ตั้งค่า rs=nothing
ตั้งค่า OraSession=nothing
การตอบกลับสิ้นสุด
สิ้นสุดถ้า
-
<html>
<ร่างกาย>
<รูปแบบวิธีการ=การกระทำ POST=test.asp>
<p>วิธีแก้ปัญหาการเข้าถึงฟิลด์ขนาดใหญ่ของ Oracle ใน ASP:</p>
<p><textarea แถว=13 ชื่อ=ข้อความ cols=104></textarea></p>
<p><ประเภทอินพุต=ค่าส่ง=บันทึกชื่อ=B1></p>
<ประเภทอินพุต=ชื่อที่ซ่อนอยู่=ค่าตกลง=1>
</แบบฟอร์ม>
</ร่างกาย>
</html>
2. โปรแกรมเรียกข้อมูล: view.asp
-
'เชื่อมต่อกับฐานข้อมูลและเปิดตารางข้อมูลในโหมดอ่านอย่างเดียว
ตั้งค่า OraSession=CreateObject(OracleInProcServer.XOraSession)
ตั้งค่า OraDatabase=OraSession.DbOpenDatabase(autotop,system/manager,0)
ตั้งค่า Rs=OraDatabase.DbCreateDynaset(select * from test order by id desc,4)
'กำหนดค่าเริ่มต้น: กำหนดขนาดไบต์ของการสกัดกั้นแต่ละครั้งเป็น 1024 ไบต์ สูงสุดสามารถตั้งค่าเป็น 65280 ไบต์ (64K)
ขนาด=65280
ผม=0
ทำ
'อ่านข้อมูลแบบวนซ้ำโดยใช้วิธี DbGetChunk ของอ็อบเจ็กต์ Fields ของชุดระเบียน Rs
Text=Rs.Fields(Blob).DbGetChunk(I*Size,Size)
ตอบกลับเขียนข้อความ
'ค้นหาจำนวนไบต์โดยละเอียดของข้อมูลที่นำออกมาในแต่ละครั้ง
Text_Size=เลนบ์(ข้อความ)
ฉัน=ฉัน+1
'หากจำนวนไบต์โดยละเอียดของข้อมูลที่นำออกมาในแต่ละครั้งน้อยกว่าขนาดไบต์ที่ดักจับที่จะกำหนด นั่นหมายความว่าชิ้นส่วนของข้อมูลเสร็จสมบูรณ์แล้ว และออกจากลูปแล้ว
วนซ้ำจนกระทั่ง Text_Size<Size
'ปิดการเชื่อมต่อข้อมูล
ตั้งค่า OraSession=nothing
-
4. คำลงท้าย:
เนื่องจากประเภทข้อมูลนั้นยาว ORACLE จึงกำหนดว่าความจุของความยาวคือ <2GB วิธีการข้างต้นสามารถเก็บข้อความขนาดใหญ่ได้ <2GB อย่างไรก็ตาม ฉันพบว่าเมื่ออ่านฉันสามารถอ่านเนื้อหาได้สูงสุด 64K เท่านั้น อิทธิพลของข้อจำกัด ASP ข้างต้น
ทุกคน หากมีประสบการณ์มากกว่านี้หรือมีแนวทางแก้ไขที่ดีกว่านี้ โปรดแจ้งให้เราทราบด้วย