Pular para o conteúdo

Insert – Update imagem em campo BLOB

Insert – Update imagem em campo BLOB

Salve Galera..

Vou interromper a sequencia de Posts sobre Indice Entendendo a ultilizaçao de indices para postar apenas algumas linhas sobre Update e Insert de imagens em campos BLOB dentro do banco ORACLE.. Percebi que existe muito pouco material falando sobre udate, vc encontra 1 ou 2 sobre insert.. mas vamos la… é algo bem basico.. apenas um script…

–Primeiro Passo:

Devemos acessar o servidor onde será realizado a alteração, criar um diretório e salvar a imagem dentro do mesmo.

[oracle@DBARegis temp]$ mkdir fotos
[oracle@DBARegis temp]$ ll
total 28
drwxr-xr-x 2 oracle oinstall 4096 Jan 14 11:12 fotos
drwxr-xr-x 2 oracle oinstall 825 Jan 14 11:00 SheilaMeloPlayBoy1.jpb
drwxr-xr-x 2 oracle oinstall 954 Jan 14 11:15 SheilaMeloPlayBoy2.jpb
drwxrwxr-x 2 oracle oinstall 16384 Ago 27 14:48 lost+found
[oracle@DBARegis temp]$ cp SheilaMeloPlayBoy1.jpb fotos
[oracle@DBARegis temp]$ cp SheilaMeloPlayBoy2.jpb fotos
[oracle@DBARegis temp]$ cd fotos/
[oracle@DBARegis fotos]$ ll
drwxr-xr-x 2 oracle oinstall 825 Jan 14 11:15 SheilaMeloPlayBoy1.jpb
drwxr-xr-x 2 oracle oinstall 954 Jan 14 11:15 SheilaMeloPlayBoy2.jpb
[oracle@DBARegis fotos]$ pwd
/temp/fotos/
[oracle@DBARegis fotos]$

Obs.: Estou utilizando linux, então dei o comando PWD para saber qual o caminho completo do diretório em que esta a minha sessão.. ou seja.. o diretório da imagem…

— Segundo Passo

Precisamos agora criar um diretório dentro do banco de dados oracle apontando para o nosso diretório “fotos”..

SQL> CREATE DIRECTORY FOTO_UPLOAD as '/temp/fotos/';

Diretório criado.

Obs.: Eu não dei permissão dentro deste diretório pois estou utilizando o usuário “MASTER” dentro do Sql*Plus.. mas caso vc esteja utilizando outro usuário .. basta rodar o comando..

SQL> GRANT READ, WRITE ON DIRECTORY FOTO_UPLOAD TO REGIS; 
Concessão bem-sucedida.

Hehehe.. até agora esta bem tranquilo..!! Vamos agora a parte do insert.. basta rodar o script abaixo..

 SQL> DECLARE
2 L_BLOB BLOB;
3 L_BFILE BFILE;
4 BEGIN

5 INSERT INTO TB_IMAGENSREGIS (ID_IMAGENSREGIS, DESCRICAO, FOTOS)

6 VALUES (17, 'Uma bela Imagem, belissima imagem', EMPTY_BLOB())
7 RETURN FOTOS INTO L_BLOB;
8 L_BFILE := BFILENAME('FOTO_UPLOAD','SheilaMeloPlayBoy1.jpb');
9 DBMS_LOB.FILEOPEN(L_BFILE);
10 DBMS_LOB.loadfromfile(L_BLOB,L_BFILE,DBMS_LOB.GETLENGTH(L_BFILE));
11 DBMS_LOB.fileclose(L_BFILE);
12 COMMIT;
13 END;
14 /

Procedimento PL/SQL concluído com sucesso.

Pronto.. insert Realizado..!!

hehehe..!!

Agora o passo do Update..!!! Albo bem simples tbm..!

 SQL> DECLARE
2 L_BLOB BLOB;
3 L_BFILE BFILE;
4 BEGIN
5 UPDATE TB_IMAGENSREGIS SET FOTOS = EMPTY_BLOB()
6 WHERE IMAGENSREGIS = 17
7 RETURN FOTOS INTO L_BLOB;
8 L_BFILE := BFILENAME('FOTO_UPLOAD','SheilaMeloPlayBoy2.jpb');
9 DBMS_LOB.FILEOPEN(L_BFILE);
10 DBMS_LOB.loadfromfile(L_BLOB,L_BFILE,DBMS_LOB.GETLENGTH(L_BFILE));
11 DBMS_LOB.fileclose(L_BFILE);
12 COMMIT;
13 END;
14 /

Procedimento PL/SQL concluído com sucesso.

Bom.. então é isto.. Um passo a passo bem simples sobre insert e update de imagem em tabela dentro do ORACLE..!

Corrido hj… Culpa do “BENDITO” GRID INFRASTRUCTURE do oracle 11gR2.. fiquei sabendo que agora para criar ASM tem q ser por este pacote.. ¬.¬.. internet lenta devido ao download deste pacote.. bom.. isto é assunto para outro POST…

Espero que este post seja útil…!!

Abraços Galera..!!!

Regis Araujo

Regis Araujo

Regis Araujo é DBA há 07 anos, especialista em Banco de Dados Oracle com experiência em SQL-Server e Bacharel em Ciências da Computação. Com conhecimentos em Banco de Dados e Sistemas operacionais.

Comentário(s) da Comunidade

  1. Avatar de thiano

    Boa tarde amigo li o seu post e fiquei com algumas duvidas uma dela é que pelo que eu entendi para eu poder inserir a imagem dentro do oracle preciso sempre fazer um upload da mesma para a pasta mapeada. Estou certo sobre isso?
    Gostaria de saber com fazer o seguinte a minha aplicação libera para o usuario escolher uma imagem para fazer um upload para a pasta e no oracle ira guardar somente o caminho.
    Depois atraves da minha aplicacao irei recuperar a imagem.
    Voce poderia me passar algum tutorial que trabalha desta forma?

  2. Avatar de thiano

    gostei muito do seu tutorial e ele me ajudou em partes precisava de que uma imagem da maquina cliente fosse para um campo blob do oracle como eu poderia fazer isso ?
    Estou utilizando delphi com odac e nao acho nenhum exemplo na internet inteira voce poderia me ajudar.

  3. Avatar de Fabio

    ola amigo, parabens pela iniciativa, mas nao consegui realizar o insert..

    esta e a mensagem de erro q eu recebo:

    ###
    Relatório de erro:
    ORA-22285: diretório ou arquivo inexistente para operação FILEOPEN
    ORA-06512: em “SYS.DBMS_LOB”, line 744
    ORA-06512: em line 9
    22285. 00000 – “non-existent directory or file for %s operation”
    *Cause: Attempted to access a directory that does not exist, or attempted
    to access a file in a directory that does not exist.
    *Action: Ensure that a system object corresponding to the specified
    directory exists in the database dictionary, or
    make sure the name is correct.

    ###

    estou usando SO Windows 7, com Oracle 11g r2

    criei o diretorio pelo sql*plus, como sysdba

    estou usando o sql develper pra escrever meu codigo, e ja testei alguns codigos diferentes, sempre com o mesmo resultado

    a unica insercao q eu consegui foi qdo eu usei BFILE ao inves d BLOB mas no caso do BFILE e adicionado apenas o link para o arquivo real, e nao e o q eu quero…

    sera q vc teria alguma solucao para o meu problema??

    obrigado.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Marcações:
plugins premium WordPress