Banco de Dados

20 abr, 2015

Carga de arquivos no Oracle APEX

Publicidade

Fala, pessoal! Como vocês estão?

Hoje vou exemplificar como fazer uma carga de arquivos e como gravar o seu conteúdo em uma coluna BLOB do banco de dados no Oracle APEX.

Quer saber mais sobre o tipo de dado BLOB? Acesse este link.

Criando a tabela exemplo

1 – Para isso, vou criar uma simples tabelinha para gravar os arquivos que serão carregados. É uma tabelinha bem simples com uma coluna para Chave Primária, Nome, Descrição, Mime Type e Charset do Arquivo, além de seu conteúdo:

CREATE SEQUENCE SEQ_ARQUIVO MINVALUE 1 MAXVALUE 9999999 START WITH 100 INCREMENT BY 1 CACHE 20;
                                
CREATE TABLE TB_ARQUIVO (ID_ARQUIVO           NUMBER NOT NULL,
                         NOME_ARQUIVO         VARCHAR2(40),
                         DESCRICAO_ARQUIVO    VARCHAR2(200) NOT NULL,
                         MIME_TYPE_ARQUIVO    VARCHAR2(40),
                         CONTEUDO_ARQUIVO     BLOB NOT NULL,
                         CHARSET_ARQUIVO      VARCHAR2(40),
                         UPDATE_DATE          DATE);
                        
ALTER TABLE TB_ARQUIVO ADD CONSTRAINT PK_ARQUIVO PRIMARY KEY (ID_ARQUIVO);

Veja que também está sendo criada uma sequência para popular a chave primária da tabela.

Uma dica: ao criar a tabela, não determine as colunas referentes às propriedades do arquivo como obrigatórios, pois o Oracle APEX faz a carga do arquivo em duas etapas. Primeiro, insere o conteúdo do arquivo e, posteriormente, atualiza a coluna de nome, mime_type e charset.

Criando as páginas

1 – Depois de criada a tabela, vamos criar as páginas de Relatório e Formulário utilizando-a como base:

apex-1

2 – Crie o relatório do tipo Interativo:

apex-2

3 – Selecione as colunas que serão apresentadas no relatório:

apex-3

4 – Crie a página de formulário para cadastro dos arquivos:

apex-4

5 – Selecione a coluna que será utilizada para acessar o registro na tela de cadastro. É recomendado utilizar a coluna que representa a chave primária da tabela, mas também podemos utilizar a pseudocoluna ROWID do banco de dados.

apex-5

6 – Defina como serão atribuídos os valores da chave primária da tabela. Nesse caso, vamos utilizar a sequência que criamos anteriormente.

apex-6

7 – Esta etapa é uma das mais importantes. Devemos selecionar quais são as colunas da tabela que serão exibidas para o usuário. As colunas MIME_TYPE_ARQUIVO, CHARSET_ARQUIVO, UPDATE_DATE e NOME_ARQUIVO serão carregadas automaticamente pelo Oracle APEX durante o processamento da página, e não é necessário ser exibido.

apex-7

8 – Conclua a criação das páginas.

Configurando as páginas

Depois que as páginas foram criadas, agora é hora de configurá-las.

Formulário

Primeiro, vamos configurar o item da página de formulário.

apex-8

Clique no item CONTEUDO_ARQUIVO:

apex-9

Veja acima que o item é do tipo File Browser, ou seja, permitirá que o usuário selecione um arquivo para efetuar a carga.

Storage Type

A propriedade Storage Type define como será alocado o arquivo. Existem dois tipos:

BLOB column specified in Item Source attribute

Determina que o conteúdo do arquivo será gravado automaticamente na coluna da tabela que está indicada na propriedade Source do item.

 apex-10

Quando selecionado esse tipo de alocação, são habilitadas as seguintes propriedades:

  • MIME Type Column: Indica em qual coluna da tabela será gravado o MIME Type do arquivo.
  • Filename Column: Indica em qual coluna da tabela será gravado o nome do arquivo.
  • Character Set Column: Indica em qual coluna da tabela será gravado o charset do arquivo.
  • BLOB Last Updated Column: Indica em qual coluna da tabela será gravada a última data de carregamento do arquivo.
  • Display Download Link: Indica se será exibido um link que permite ao usuário efetuar o download do arquivo que foi carregado.
  • Download Link Text: Determina um texto para o link de download citado acima.
  • Content Disposition: Determina onde o arquivo será exibido. Inline – se possível, exibe no browser. Attachment – efetua o download do arquivo.

Atenção: É muito importante saber que só é possível informar as colunas da mesma tabela onde está o campo BLOB.

Table WWV_FLOW_FILES

Quando selecionada esta opção, o Oracle APEX efetua a carga do arquivo e insere um registro na tabela WWV_FLOW_FILES. Logo, podemos efetuar qualquer tipo de manipulação com o arquivo. É possível acessar o registro da tabela durante toda a sessão do APEX relacionando a coluna NAME com o conteúdo do item, vide exemplo abaixo:

SELECT *
  FROM WWV_FLOW_FILES F
 WHERE F.NAME = :P4_CONTEUDO_ARQUIVO

Neste momento, vamos configurar o item com a opção BLOB column specified in Item Source atribute na propriedade Storage Type.

Faça outros devidos ajustes na página, como a acentuação dos labels, então execute clicando no botão apex-11 e veja como ficou:

apex-12

Fazendo a validação do tamanho do arquivo

Vamos criar uma validação para limitar o tamanho máximo do arquivo.

Crie uma validação em que, caso o tamanho do arquivo for maior que 2000 bytes, retorne uma mensagem de erro.

apex-13

Veja abaixo que está sendo consultada a tabela temporária WWV_FLOW_FILES, que é a primeira tabela onde o Oracle APEX carrega o arquivo quando a carga é efetuada.

Se a propriedade Storage Type estiver configurada como BLOB column specified in Item Source attribute, o Oracle APEX automaticamente atualizará a tabela final e apagará o registro da tabela temporária. Se a propriedade Storage Type estiver configurada como Table WWV_FLOW_FILES, o Oracle APEX irá inserir apenas na tabela WWV_FLOW_FILES.

apex-14

Quando for efetuada uma tentativa de carregar um arquivo maior que 2000 bytes, a mensagem abaixo será exibida:

 apex-15Relatório

Agora vamos fazer os devidos ajustes na página de relatório.

apex-16

Vá até a edição da coluna CONTEUDO_ARQUIVO na região que representa o relatório.

apex-17

Assim como no item da página de formulário, temos as mesmas propriedades. Além delas, temos as seguintes:

  • Format Mask – Determina como será exibida a coluna BLOB. Download – link para efetuar download do arquivo. Image – exibirá uma imagem.
  • Table – Nome da tabela que contem a coluna BLOB.
  • Primary Key Column 1 e 2 – Colunas que representam a chave primária da tabela.

Para as outras propriedades, informe os valores da mesma forma que foi informado no item do formulário.

Faça outros devidos ajustes na página e execute clicando no botão apex-11.

Veja como ficou o resultado:

apex-18

Conclusão

De maneira muito simples, podemos efetuar a carga de um arquivo para uma coluna BLOB do banco de dados utilizando recursos nativos do Oracle APEX sem a necessidade de grandes intervenções de código – exceto na escrita das regras de validação, que permitem a criação de qualquer regra necessária.

Que saber como começar a criar sua própria aplicação utilizando Oracle APEX? Veja aqui.

Até a próxima!!!

Para acessar a aplicação demo da nossa série de artigos utilize o seguinte link.

  • Usuário: DEMO
  • Senha: imasters