Galera boa tarde.
No processo de NFe estamos utilizando o utl_http.
Até então não tinhamos problema, ate que houve a necessidade de gerar uma nota fiscal gigante, onde a mesma teria +- 60.000 caracteres.
Dai saimos alterando tudo para clob nossas variaaveis, mas tivemos um problema: chega determinado momento que batemos na package utl_http, e ela possui procedures, por exemplo, write_text que recebe um varchar2 com o corpo do xml...
alguém sabe se há uma forma de eu alterar a package utl_http, ou utilizar algum outro recurso???
desde já grato.
Limite utl_http com varchar2
-
- Rank: DBA Pleno
- Mensagens: 232
- Registrado em: Sex, 30 Mar 2007 7:26 pm
- Localização: Londrina - PR
Rafael O. Genaro
Já tive que realizar algo parecido para envio de e-mails, com o UTL_SMTP...
No caso, foi só ler o LOB particionado de n em n bytes em um loop, chamando o
O UTL_HTTP possui as procedures WRITE e WRITE_LINE, que provavelmente permitirão o envio dos dados.
Seria algo assim:
No caso, foi só ler o LOB particionado de n em n bytes em um loop, chamando o
UTL_SMTP.WRITE_RAW
. O UTL_HTTP possui as procedures WRITE e WRITE_LINE, que provavelmente permitirão o envio dos dados.
Seria algo assim:
-- declaração do lob, abertura da conexão, etc..
-- ...
pos_inicial := 1;
tam_buffer := 2000;
tam_lob := dbms_lob.getlength( lob );
while ( pos_inicial <= least( tam_lob, 2000 ) ) loop
utl_http.write( conexao, dbms_lob.substr( lob, tam_buffer, pos_inicial ) );
pos_inicial := pos_inicial + tam_buffer ;
end loop;
-
- Rank: DBA Pleno
- Mensagens: 241
- Registrado em: Ter, 09 Out 2007 11:15 am
- Localização: Batatais - SP
olha muito esquisito, movi um arquivo texto de 10 MB utilizando apenas o write text... sem precisar de loop sem nada...
vai entender... provavelmente a package utl_http deve ser inteligente e, por eu ter instanciado com CLOB, ela já deve trabalhar com lobs..
vlw...
vai entender... provavelmente a package utl_http deve ser inteligente e, por eu ter instanciado com CLOB, ela já deve trabalhar com lobs..
vlw...
- fsitja
- Rank: OraSauro
- Mensagens: 611
- Registrado em: Seg, 19 Jan 2009 4:29 pm
- Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html
OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist
E no outro lado recebeu o conteúdo completo? Não recebeu apenas uma versão "cortada"?
O
O
Write_text
não é sobrecarregado para varchar2 ou Clob, é apenas varchar2 e, dessa forma, não deveria enviar mais do que 32.676 caracteres por chamada.-
- Rank: DBA Pleno
- Mensagens: 241
- Registrado em: Ter, 09 Out 2007 11:15 am
- Localização: Batatais - SP
pior que ele enviou... tmb não me pergunte rs... foi td bem...
tmb achei estranho pois ele recebe um varchar2 como parametro para escrever o texto, porem eu mando uma variavel tipo clob
vou fazer mais alguns acompanhamentos.... mais já movi um arquivo de 31MB com aproximadamente 1.000.000 de caracteres e ele foi rapidim...
só froyd expplica..
vou comentando como vai saindo... agora estou com este problema de cortar conteudo nos response das mensagens do webservice...
vou alterando e vou postando o que vou fazendo aqui... vamos ver...
agora se alguém conhecer uma area de exatas que não tem nada de exato igual a programacao me fala.. porque eu to doido com essas incognitas... to achando que programacao ta mais ligado a area de religiao e teologia do que exatas.. é só ter fé q funciona...
abrçs
tmb achei estranho pois ele recebe um varchar2 como parametro para escrever o texto, porem eu mando uma variavel tipo clob
vou fazer mais alguns acompanhamentos.... mais já movi um arquivo de 31MB com aproximadamente 1.000.000 de caracteres e ele foi rapidim...
só froyd expplica..
vou comentando como vai saindo... agora estou com este problema de cortar conteudo nos response das mensagens do webservice...
vou alterando e vou postando o que vou fazendo aqui... vamos ver...
agora se alguém conhecer uma area de exatas que não tem nada de exato igual a programacao me fala.. porque eu to doido com essas incognitas... to achando que programacao ta mais ligado a area de religiao e teologia do que exatas.. é só ter fé q funciona...
abrçs
-
- Rank: DBA Pleno
- Mensagens: 241
- Registrado em: Ter, 09 Out 2007 11:15 am
- Localização: Batatais - SP
olha acabou que dando certo
seguindo os conselhos do rogenaro eu mandei um loop tanto para escrita (write_text) para enviar dados ao webservice como para leitura (read_text) para receber o envelope do web_service...
vlw galera....
seguindo os conselhos do rogenaro eu mandei um loop tanto para escrita (write_text) para enviar dados ao webservice como para leitura (read_text) para receber o envelope do web_service...
l_http_response := UTL_HTTP.get_response(l_http_request);
DBMS_LOB.CREATETEMPORARY(aux1,TRUE);
loop
UTL_HTTP.read_text(l_http_response, l_envelope);
dbms_lob.writeappend(aux1,length(l_envelope),l_envelope);
exit when length(l_envelope) < 32767;
end loop;
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Bing [Bot] e 6 visitantes