Campo imagem Blob - UTL_HTTP.request

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
victorpsl
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 41
Registrado em: Seg, 19 Mai 2008 8:51 am
Localização: SP
--
Victor Hugo

Bom dia galera!!!!

Estou com um problema, porém não estou conseguindo resolver... Gostaria de saber se alguém conseguiria me dar uma ajuda! :D


Eu tenho um forms onde mostra os itens(produto) que determinado cliente possui. Estou inserindo um campo do tipo imagem no forms para que a cada item que seja mudado possa ser carregada a imagem do item, mas a imagem do item não temos no servidor e nem teremos, tenho que buscar a imagem no site do cliente ou em algum endereço via web.

Estou utilizando o UTL_HTTP.request para buscar o conteúdo da página, onde no código eu jogo o conteúdo para uma variável do tipo blob, não estou conseguindo nem inserir na tabela temporária a imagem, já que dá um erro "numeric or value error conversion error".

No momento para efetuar o teste criei um botão onde chamo passando um link de qualquer imagem apenas para teste mesmo, e assim que pressiono o botão chama a proc e dou um go_block para o bloco database da tabela temporária onde teóricamente deveria inserir a imagem, e por consequência um execute_query. Mas nem sequer chego a essa parte.

Segue o meu código e o código que uso para efetuar o teste. Se alguém já fez algo parecido e puder dar uma força agradeço! ...

Código da procedure

Selecionar tudo

 
procedure chama_url_clob( p_url varchar2 ) is
    --
    blobvar          blob := empty_blob;
    len              number;
    buffer           varchar2(32767);
    l_http_request   utl_http.req;
    l_http_response  utl_http.resp;
    resp             utl_http.resp;
    value            varchar2(1024);
    --
  begin
    --
    dbms_lob.createtemporary(blobvar, TRUE);
    dbms_lob.open(blobvar, dbms_lob.lob_readwrite);
    --
    --Prepara a abertura da página
    --Define um timeout de resposta de 3 minutos
    begin
      utl_http.set_transfer_timeout(180);
      l_http_request := utl_http.begin_request(p_url);
      utl_http.set_header(l_http_request, 'User-Agent', 'Mozilla/4.0');
      --
      --Loop para buscar o conteúdo da página
      resp := utl_http.get_response(l_http_request);
      --
      loop
        --
        utl_http.read_line(resp, value, true);
        --Escreve o clob de resposta
        len := length(value);
        --
        if len > 0 then
          dbms_lob.writeappend(blobvar, len, value);
        end if;        
        --
      end loop;
      --
      utl_http.end_response(resp);
      --
    exception
      when utl_http.end_of_body then
        utl_http.end_response(resp);        
    end;
    --
    -- fecha o clob
  dbms_lob.close(blobvar);
  --
  --insere na tabela temporária imagem_url
  insert into imagem_url ( imur_id_imagem, imur_blob_imagem )
  values  ( '+intIdImagem+' , blobvar);
  --
  exception
    when others then
      raise_application_error( -20000, pilha.propaga( sqlcode, sqlerrm||' Erro detalhado: '||utl_http.get_detailed_sqlerrm, 'chama_url_clob') , true);
  end chama_url_clob;
  --
  --
end pc_load_image;

Código que uso dentro do forms

Selecionar tudo

begin
	pc_load_image.chama_url_clob('http://hsfeatures.com/features04/images/bmp3aj_12.jpg');
	go_block('imagem_url');
	execute_query;
	commit;
end;
O código dentro do forms vou dar uma melhorada nele depois, no momento a prioridade é aparecer a imagem.

Se alguém puder me ajudar! Vlw!! ;)


:-o
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 2 visitantes