Когда я разрабатываю программы структуры BS, мне часто приходится обрабатывать некоторые текстовые данные большой емкости в ORACLE, поэтому после неоднократного тестирования я, наконец, использовал ASP для успешного решения проблемы доступа к большим текстовым данным в ORACLE.
1. Операционная среда:
1. Microsoft Windows 2000 Server + IIS 5.0.
2. Oracle8i, китайская стандартная версия
2. Создайте таблицу данных:
СОЗДАТЬ ТАБЛИЦУ СИСТЕМА.ТЕСТ(
БЛОБ ДЛИННЫЙ,
ИДЕНТИФИКАЦИОННЫЙ НОМЕР)
/
3. Исходная программа:
1. Программа хранения данных: test.asp
<%
'Часть обработки отправки формы
'------------------------------------------------ -
Если запрос(ок)=1, то
'Функция преобразования символов
функция tansstr(sstr)
сстр=заменить(сстр, , )
sstr=replace(sstr,chr(13) и chr(10),<br>)
tansstr=sstr
конечная функция
'Отправить присвоение данных
a=lenb(запрос(текст))
b=len(запрос(текст))
c = tansstr (запрос (текст))
'Откройте базу данных, откройте таблицу тестовых данных с Rs в качестве набора записей
Установите OraSession=CreateObject(OracleInProcServer.XOraSession)
Установите OraDatabase=OraSession.DbOpenDatabase(autop,system/manager,0)
Set rs=OraDatabase.CreateDynaset(выберите * из тестового порядка по идентификатору desc,0)
'Находим значение идентификатора
если rs.eof тогда
идентификатор=1
еще
идентификатор=rs(id)+1
конец, если
«Поскольку длина операторов SQL ограничена, данные хранятся в операторах, отличных от SQL.
'------------------------------------------------ - ------
«Новый рекорд
rs.DbAddNew
Классика в этом предложении: используйте метод DbAppendChunk объекта Fields набора записей RS для решения проблемы хранения больших полей.
rs.Fields(blob).DbAppendChunk(c)
'Сохранить значение идентификатора
rs(id)=id
'Обновляем набор записей
rs.DbUpdate
'Показать раздел результатов
'------------------------------------------------ - -------
Response.write Данные сохранены в базе данных. <br>
Response.write общее количество занятых символов: & formatnumber(b,2,-2,-2,-1) &words<br>
Response.write общее количество занятых байтов: & formatnumber(a,2,-2,-2,-1) & Byte<br>
Response.write <a href='view.asp'>Пожалуйста, прочитайте...
«Закройте соединение для передачи данных.
RS.закрыть
установить rs=ничего
Установить OraSession=ничего
Ответ.конец
Конец, если
%>
<html>
<тело>
<метод формы=POST action=test.asp>
<p>Решение проблемы доступа к большим полям Oracle в ASP:</p>
<p><textarea rows=13 name=text cols=104></textarea></p>
<p><тип ввода=отправить значение=Сохранить имя=B1></p>
<тип ввода=скрытое имя=значение ОК=1>
</форма>
</тело>
</html>
2. Программа вызова данных: view.asp
<%
'Подключаемся к базе данных и открываем таблицу данных в режиме только для чтения
Установите OraSession=CreateObject(OracleInProcServer.XOraSession)
Установите OraDatabase=OraSession.DbOpenDatabase(autop,system/manager,0)
Set Rs=OraDatabase.DbCreateDynaset(выберите * из тестового порядка по идентификатору desc,4)
'Назначьте начальное значение: определите размер каждого перехвата как 1024 байт, максимум можно установить на 65 280 байт (64 КБ).
Размер=65280
я=0
Делать
'Чтение данных в цикле с использованием метода DbGetChunk объекта Fields набора записей Rs
Text=Rs.Fields(Blob).DbGetChunk(I*Size,Size)
Ответ.Написать текст
'Найти подробное количество байтов данных, извлекаемых каждый раз
Text_Size=Lenb(Текст)
Я=Я+1
'Если подробное количество байтов данных, извлекаемых каждый раз, меньше определяемого размера перехваченных байтов, это означает, что часть данных завершена и цикл завершается.
Цикл до тех пор, пока Text_Size<Size
'Закрыть соединение для передачи данных
Установить OraSession=ничего
%>
4. Постскриптум:
Поскольку тип данных длинный, ORACLE предусматривает, что емкость long составляет <2 ГБ. Вышеупомянутый метод может хранить большой текст <2 ГБ. Однако я обнаружил, что при чтении я могу читать только максимальный размер 64 КБ. на влияние вышеуказанного метода ASP.
Друзья, если у вас есть больше опыта или лучшие решения, пожалуйста, дайте нам знать.