Cuando desarrollo programas de estructura BS, a menudo necesito procesar algunos datos de texto de gran capacidad en ORACLE, por lo que después de repetidas pruebas, finalmente utilicé ASP para resolver con éxito el problema del acceso a datos de texto de gran tamaño en ORACLE.
1. Entorno operativo:
1. Servidor Microsoft Windows 2000 + IIS 5.0
2. Edición estándar china de Oracle8i
2. Cree una tabla de datos:
CREAR TABLA SISTEMA.PRUEBA(
GOTA LARGA,
NÚMERO DE IDENTIFICACIÓN)
/
3. Programa fuente:
1. Programa de almacenamiento de datos: test.asp
<%
'Parte de procesamiento de envío de formulario
'------------------------------------------------ -
Si solicitud (ok) = 1 entonces
'Función de conversión de caracteres
función tansstr(sstr)
sstr=reemplazar(sstr, , )
sstr=reemplazar(sstr,chr(13) & chr(10),<br>)
tansstr=sstr
función final
'Enviar asignación de datos
a=lenb(solicitud(texto))
b=len(solicitud(texto))
c=tansstr(solicitud(texto))
'Abra la base de datos, abra la tabla de datos de prueba con Rs como conjunto de registros
Establecer OraSession=CreateObject(OracleInProcServer.XOraSession)
Establecer OraDatabase=OraSession.DbOpenDatabase(autop,system/manager,0)
Establecer rs=OraDatabase.CreateDynaset(seleccione * del orden de prueba por id desc,0)
'Encontrar el valor de ID
si rs.eof entonces
identificación=1
demás
identificación=rs(identificación)+1
terminar si
'Debido a que está limitado por la longitud de las declaraciones SQL, los datos se almacenan en declaraciones que no son SQL.
'------------------------------------------------ - ------
'Nuevo récord
rs.DbAddNuevo
'El clásico está en esta oración: utilice el método DbAppendChunk del objeto Fields del conjunto de registros RS para manejar el problema del almacenamiento de campos grandes.
rs.Fields(blob).DbAppendChunk(c)
'Guardar valor de ID
rs(identificación)=identificación
'Actualiza el conjunto de registros
rs.DbActualización
'Mostrar sección de resultados
'------------------------------------------------ - -------
Response.write Los datos se han almacenado en la base de datos. <br>
Response.write número total de caracteres ocupados: & formatnumber(b,2,-2,-2,-1) & palabras<br>
Response.write número total de bytes ocupados: & formatnumber(a,2,-2,-2,-1) & Byte<br>
Response.write <a href='view.asp'>Por favor lea...
'Cierra la conexión de datos.
rs.cerrar
establecer rs = nada
Establecer OraSession = nada
Respuesta.fin
Terminar si
%>
<html>
<cuerpo>
<método de formulario=acción POST=test.asp>
<p>Solución al problema de acceder a campos grandes de Oracle en ASP:</p>
<p><textarea filas=13 nombre=texto cols=104></textarea></p>
<p><tipo de entrada=enviar valor=Guardar nombre=B1></p>
<tipo de entrada=nombre oculto=valor correcto=1>
</formulario>
</cuerpo>
</html>
2. Programa de llamada de datos: view.asp
<%
'Conéctese a la base de datos y abra la tabla de datos en modo de solo lectura
Establecer OraSession=CreateObject(OracleInProcServer.XOraSession)
Establecer OraDatabase=OraSession.DbOpenDatabase(autop,system/manager,0)
Establecer Rs=OraDatabase.DbCreateDynaset (seleccione * del orden de prueba por id desc,4)
'Asignar valor inicial: define el tamaño de bytes de cada interceptación como 1024 bytes, el máximo se puede establecer en 65280 bytes (64 K)
Tamaño = 65280
yo=0
Hacer
'Lee datos en un bucle usando el método DbGetChunk del objeto Fields del conjunto de registros Rs
Texto=Rs.Fields(Blob).DbGetChunk(I*Tamaño,Tamaño)
Respuesta.escribir texto
'Encuentra el número detallado de bytes de datos extraídos cada vez
Tamaño_texto=Lenb(Texto)
yo=yo+1
'Si el número detallado de bytes de datos extraídos cada vez es menor que el tamaño de bytes interceptados que se definirá, significa que el dato se ha completado y se ha salido del bucle.
Bucle hasta Text_Size<Tamaño
'Cerrar conexión de datos
Establecer OraSession = nada
%>
4. Posdata:
Debido a que el tipo de datos es largo, ORACLE estipula que la capacidad de largo es <2 GB. El método anterior puede almacenar texto grande <2 GB. Sin embargo, descubrí que al leer, solo puedo leer el contenido máximo de 64 K. a la influencia del método anterior.
Todos, si tienen más experiencia o mejores soluciones, háganoslo saber.