BS 구조 프로그램을 개발할 때 일부 대용량 텍스트 데이터를 ORACLE에서 처리해야 하는 경우가 종종 있기 때문에 반복적인 테스트를 거쳐 마침내 ASP를 사용하여 ORACLE에서 대용량 텍스트 데이터 액세스 문제를 성공적으로 해결했습니다.
1. 운영 환경:
1. 마이크로소프트 윈도우 2000 서버 + IIS 5.0
2. Oracle8i 중국어 표준판
2. 데이터 테이블을 생성합니다:
테이블 시스템을 생성합니다.테스트(
블롭 롱,
ID번호)
/
3. 소스 프로그램:
1. 데이터 저장 프로그램: test.asp
<%
'양식 제출 처리 부분
'------------------------------------------------ -
요청(ok)=1이면
'문자 변환 기능
함수 tansstr(sstr)
sstr=교체(sstr, , )
sstr=replace(sstr,chr(13) & chr(10),<br>)
탄스트=sstr
함수 종료
'데이터 할당 제출
a=lenb(요청(텍스트))
b=len(요청(텍스트))
c=tansstr(요청(텍스트))
'데이터베이스를 열고 Rs를 레코드 세트로 사용하여 테스트 데이터 테이블을 엽니다.
OraSession=CreateObject(OracleInProcServer.XOraSession) 설정
OraDatabase=OraSession.DbOpenDatabase(autop,system/manager,0) 설정
rs=OraDatabase.CreateDynaset(id 설명에 따른 테스트 순서에서 * 선택,0) 설정
'ID 값 찾기
만약 rs.eof라면
아이디=1
또 다른
아이디=rs(ID)+1
종료하면
'SQL문의 길이에 제한이 있기 때문에 SQL문이 아닌 형태로 데이터가 저장된다.
'------------------------------------------------ - ------
'신기록
rs.DbAddNew
'고전적인 문장은 다음과 같습니다. RS 레코드 세트의 Fields 개체의 DbAppendChunk 메서드를 사용하여 대규모 필드 저장 문제를 처리합니다.
rs.Fields(blob).DbAppendChunk(c)
'ID값 저장
RS(ID)=ID
'레코드 세트 새로 고침
rs.Db업데이트
'결과 섹션 표시
'------------------------------------------------ - -------
Response.write 데이터가 데이터베이스에 저장되었습니다. <br>
응답.점유된 총 문자 수 쓰기: & 형식 번호(b,2,-2,-2,-1) 및 단어<br>
Response.write 총 점유 바이트 수: & formatnumber(a,2,-2,-2,-1) & Byte<br>
Response.write <a href='view.asp'>꼭 읽어주세요...
'데이터 연결을 종료합니다.
RS.닫기
rs=아무것도 설정하지 않음
OraSession=아무것도 설정하지 않음
응답.끝
종료 조건
%>
<html>
<본문>
<양식 방법=POST 작업=test.asp>
<p>ASP에서 Oracle 대규모 필드에 액세스하는 문제에 대한 솔루션:</p>
<p><textarea 행=13 name=text cols=104></textarea></p>
<p><입력 유형=제출 값=저장 이름=B1></p>
<입력 유형=숨겨진 이름=ok 값=1>
</form>
</body>
</html>
2. 데이터 호출 프로그램: view.asp
<%
'데이터베이스에 연결하고 읽기 전용 모드로 데이터 테이블을 엽니다.
OraSession=CreateObject(OracleInProcServer.XOraSession) 설정
OraDatabase=OraSession.DbOpenDatabase(autop,system/manager,0) 설정
Rs=OraDatabase.DbCreateDynaset 설정(ID 설명별로 테스트 순서에서 * 선택,4)
'초기값 할당: 각 차단의 바이트 크기를 1024바이트로 정의하고 최대값은 65280바이트(64K)로 설정할 수 있습니다.
크기=65280
나=0
하다
'Rs 레코드 세트의 Fields 개체에 대한 DbGetChunk 메서드를 사용하여 루프에서 데이터를 읽습니다.
텍스트=Rs.Fields(Blob).DbGetChunk(I*크기, 크기)
응답.텍스트 쓰기
'매번 꺼내는 데이터의 상세 바이트 수를 구합니다.
Text_Size=길이(텍스트)
나=나+1
'매번 꺼내는 데이터의 세부 바이트 수가 정의할 가로채기 바이트 크기보다 작으면 데이터 조각이 완료되고 루프가 종료된다는 의미입니다.
Text_Size<Size까지 반복
'데이터 연결 종료
OraSession=아무것도 설정하지 않음
%>
4. 추신:
데이터 유형이 길기 때문에 ORACLE에서는 long의 용량이 2GB 미만이라고 규정하고 있는데, 위의 방법은 2GB 미만의 큰 텍스트를 저장할 수 있지만 읽을 때 최대 64K의 내용만 읽을 수 있기 때문일 것입니다. 위 방법의 영향을 받습니다.
여러분, 더 많은 경험이나 더 나은 해결책이 있다면 알려주세요.