Pular para o conteúdo

Fóruns Banco de dados Oracle Gravar imagem e/ou pdf no banco 10g Gravar imagem e/ou pdf no banco 10g

#108755
Avatar photoJosé Laurindo Chiappa
Moderador

    Seguinte : se vc for programar ** diretamente ** no database, as ** duas ** linguagens-padrão do database Oracle (ie, SQL e PL/SQL) *** não possuem *** comandos para vc enviar dados binários pela rede : TODAS as built-ins capazes de ler um arquivo (ie, DBMS_LOB.LOADFROMFILE, UTL_FILE, EXTERNAL TABLES, etc) ** exigem ** que o arquivo a ser lido esteja PRESENTE numa pasta/diretório diretamente acessível pelo RDBMS, o que implica em ** OU ** vc usar uma pasta/diretório criada fisicamente no próprio servidor (no seu caso, a máquina-cliente teria que enviar o arquivo via FTP ou SCP ou coisa assim (até EMAIL que seja, se o servidor Oracle tem acesso ao servidor de email) para o servidor Oracle), ** OU ** então vc pode usar um dos recursos que permitem que o servidor do RDBMS ‘enxergue’ uma pasta dum servidor remoto como se fosse local (ie, usar um mount-point NFS ou Samba ou share de Windows)…. E que fique BEM CLARO :

    a. o usuário final *** NÃO VAI LOGAR **** na máquina do RDBMS, nunca, de maneira alguma : se vc usar a opção de enviar o arquivo da máquina do usuário para o servidor do RDBMS Oracle, vai haver algum PROGRAMA NÃO-INTERATIVO, com senha criptografada, que vai fazer o FTP ou o SCP da máquina do usuário para o servidor do RDBMS

    b. para EVITAR que cada máquina de cada usuário tenha um diretório compartilhado é TOTALMENTE POSSÍVEL vc usar um Combinação de técnicas, tipo : há um servidor de arquivos, o usuário grava lá o arquivo que quer enviar pro banco (via um share Windows montado como um drive local na máquina dele), e depois uma OUTRA rotina transfere o arquivo pro servidor Oracle, ** OU ** então o servidor Oracle acessa o servidor de arquivos via NFS/Samba/Windows share/o que vc tiver/puder…

    ==> Já se NÃO FOR OBRIGADO a programar diretamente dentro do database, aí sim vc tem Opções diversas para escrever um programa que vai estar sendo executado na máquina-cliente (ou no Browser da máquina-cliente, que seja), fazer com que seu programa leia o arquivo desejado, abra uma conexão com o banco e envie pela rede esse arquivo binário pro servidor do banco ou mesmo direto pro database…. Três opções comuns de programação para isso são :

    a. JAVA : http://www.dba-oracle.com/t_insert_image_blob_client_pc.htm é um exemplo

    b. APEX : http://oracledba.bigresource.com/Application-Express-direct-file-upload-from-end-user-machine-to-sftp-server–Mr3433ZnF.html é um exemplo

    c. Oracle Forms : desde muito tempo o Forms tem a capacidade de criar um item de tela que reflete uma coluna de uma tabela no database (o que o Forms chama de DATABASE ITEM), aí tudo que vc inserir nesse objeto do programa (inclusive um arquivo binário que vc leu do cliente) vai ser enviado e gravado pro database… Eu fiz isso muito na época do Forms 6i client/server, hoje em dia o Forms é WEB então talvez algum ponto mais seja necessário mas o conceito ainda existe afaik..

    Mas muitas outras linguagens de programação externas ao database são capazes de ler arquivos na máquina-cliente onde estão sendo executados, abrir uma conexão ao banco e enviar pedaços binários pro banco, a serem inseridos numa coluna BLOB que p programa abriu na sessão….

    EU, PESSOALMENTE, não tiver quase nenhuma experiência com essas opções externas ao database (exceção feita ao Forms), pois sempre que precisei apelei pra alguma das built-ins do banco e ou enviei o arquivo ou compartilhei com o servidor Oracle uma máquina remota que continha o arquivo….

    []s

    Chiappa