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..!!!
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?
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.
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.