Quando desenvolvo programas de estrutura BS, muitas vezes preciso processar alguns dados de texto de grande capacidade no ORACLE; portanto, após testes repetidos, finalmente usei o ASP para resolver com êxito o problema de acesso a grandes dados de texto no ORACLE.
1. Ambiente operacional:
1. Microsoft Windows 2000 Server + IIS 5.0
2. Oracle8i Edição Padrão Chinesa
2. Crie uma tabela de dados:
CRIAR TABELA SISTEMA.TESTE(
BLOB LONGO,
NÚMERO DE IDENTIFICAÇÃO)
/
3. Programa fonte:
1. Programa de armazenamento de dados: test.asp
<%
'Parte de processamento de envio de formulário
'------------------------------------------------ -
Se solicitação(ok)=1 então
'Função de conversão de caracteres
função tansstr(sstr)
sstr=substituir(sstr, , )
sstr=substituir(sstr,chr(13) & chr(10),<br>)
tansstr=sstr
função final
'Enviar atribuição de dados
a=lenb(solicitação(texto))
b=len(solicitação(texto))
c=tansstr(solicitação(texto))
'Abra o banco de dados, abra a tabela de dados de teste com Rs como conjunto de registros
Definir OraSession=CreateObject(OracleInProcServer.XOraSession)
Definir OraDatabase=OraSession.DbOpenDatabase(autop,sistema/gerente,0)
Defina rs=OraDatabase.CreateDynaset(selecione * na ordem de teste por id desc,0)
'Encontre o valor do ID
se rs.eof então
identificação=1
outro
id=rs(id)+1
terminar se
'Como é limitado pelo comprimento das instruções SQL, os dados são armazenados em instruções não SQL.
'------------------------------------------------ - ------
'Novo recorde
rs.DbAddNovo
'O clássico está nesta frase: Use o método DbAppendChunk do objeto Fields do conjunto de registros RS para lidar com o problema de armazenamento de campos grandes.
rs.Fields(blob).DbAppendChunk(c)
'Salvar valor do ID
rs(id)=id
'Atualiza o conjunto de registros
rs.DbUpdate
'Exibir seção de resultados
'------------------------------------------------ - -------
Response.write Os dados foram armazenados no banco de dados. <br>
Response.write número total de caracteres ocupados: & formatnumber(b,2,-2,-2,-1) & words<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, leia...
'Feche a conexão de dados.
rs.fechar
definir rs = nada
Definir OraSession = nada
Resposta.fim
Terminar se
%>
<html>
<corpo>
<método de formulário = ação POST = teste.asp>
<p>Solução para o problema de acesso a campos grandes do Oracle em ASP:</p>
<p><textarea rows=13 name=text cols=104></textarea></p>
<p><input type=submit value=Salvar nome=B1></p>
<tipo de entrada=nome oculto=ok valor=1>
</form>
</body>
</html>
2. Programa de chamada de dados: view.asp
<%
'Conecte-se ao banco de dados e abra a tabela de dados em modo somente leitura
Definir OraSession=CreateObject(OracleInProcServer.XOraSession)
Definir OraDatabase=OraSession.DbOpenDatabase(autop,sistema/gerente,0)
Defina Rs=OraDatabase.DbCreateDynaset(selecione * na ordem de teste por id desc,4)
'Atribuir valor inicial: defina o tamanho do byte de cada interceptação como 1024 bytes, o máximo pode ser definido como 65280 bytes (64K)
Tamanho=65280
eu=0
Fazer
'Lê dados em um loop usando o método DbGetChunk do objeto Fields do conjunto de registros Rs
Text=Rs.Fields(Blob).DbGetChunk(I*Tamanho,Tamanho)
Texto de resposta.write
'Encontre o número detalhado de bytes de dados retirados cada vez
Text_Size=Lenb(Texto)
Eu=eu+1
'Se o número detalhado de bytes de dados retirados a cada vez for menor que o tamanho do byte interceptado a ser definido, isso significa que o dado foi concluído e o loop foi encerrado.
Loop até Text_Size<Size
'Fechar conexão de dados
Definir OraSession = nada
%>
4. Pós-escrito:
Como o tipo de dados é longo, a capacidade do ORACLE é <2GB. O método acima pode armazenar texto grande <2GB. à influência do método acima.
Pessoal, se vocês têm mais experiência ou melhores soluções, por favor nos avisem.