Armazenando imagens no oracle XE

DBA Geral (instalação, configuração do banco, scripts do Sql*Plus, shell scripts, batch scripts, etc...)
Responder
eduardo.d2
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 67
Registrado em: Ter, 08 Jan 2008 9:13 pm
Localização: são paulo
Eduardo Andrade

Informações do Ambiente:
* Versão do Oracle:10 XE
* Sistema Operacional: XP

Boa tarde a todos gostaria de saber como armazenar IMAGEM no oracle 10 XE? so quero armazenar do computador para o banco direto sem auxilio de nenhum aplicativo asp,asp.net etc isso e possivel ?

desde já meu muito obrigado e até +
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

Que eu saiba, você teria que fazer com PL/SQL, no caso, uma procedure, que realize esta inserção.
Dê uma procurada aqui no fórum por BLOB ou Imagem que irá localizar tópicos interessantes.
eduardo.d2
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 67
Registrado em: Ter, 08 Jan 2008 9:13 pm
Localização: são paulo
Eduardo Andrade

Então pegue o exemplo de uma cara no forum, mais esta retornando um monte de erro
esse eo codigo

Selecionar tudo

[CREATE OR REPLACE DIRECTORY DIR_IMAGEN
AS 'c:\MEUS~DOCUMENTOS\MINHAS~IMAGENS'

DECLARE

L_BLOB BLOB;
L_BFILE BFILE;

BEGIN
INSERT INTO CLIENTESFOTO
VALUES (EMPTY_BLOB())
RETURNING IMAGE INTO L_BLOB;

L_BFILE := BFILENAME('c:\MEUS~DOCUMENTOS\MINHASIMAGENS','transformers_9_1024.JPEG'); 


DBMS_LOB.FILEOPEN(L_BFILE);
DBMS_LOB.loadfromfile(L_BLOB,L_BFILE,DBMS_LOB.GETLENGTH(L_BFILE));
DBMS_LOB.fileclose(L_BFILE);

END;]
e esse eo erro
[Error starting at line 1 in command:

Selecionar tudo

CREATE OR REPLACE DIRECTORY DIR_IMAGEN
AS 'c:\MEUS~DOCUMENTOS\MINHAS~IMAGENS'

DECLARE

L_BLOB BLOB
Erro:

Selecionar tudo

Error at Command Line:2 Column:38
Error report:
SQL Error: ORA-00901: comando CREATE inválido
00901. 00000 -  "invalid CREATE command"
*Cause:    
*Action:

Error starting at line 7 in command:
L_BFILE BFILE;
Error report:
Unknown Command

Error starting at line 9 in command:
BEGIN
INSERT INTO CLIENTESFOTO
VALUES (EMPTY_BLOB())
RETURNING IMAGE INTO L_BLOB;

L_BFILE := BFILENAME('c:\MEUS~DOCUMENTOS\MINHASIMAGENS','transformers_9_1024.JPEG'); 


DBMS_LOB.FILEOPEN(L_BFILE);
DBMS_LOB.loadfromfile(L_BLOB,L_BFILE,DBMS_LOB.GETLENGTH(L_BFILE));
DBMS_LOB.fileclose(L_BFILE);
Error report:
ORA-06550: linha 11, coluna 28:
PLS-00103: Encontrado o símbolo "end-of-file" quando um dos seguintes símbolos era esperado:

   begin case declare end exception exit for goto if loop mod
   null pragma raise return select update while with
   <um identificador>
   <um identificador delimitado por aspas duplas>
   <uma variável de ligação> << close current delete fetch
   lock insert open rollback savepoint set sql execute commit
   forall merge pipe
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:
Desde já meu muito obrigado
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

tente mudar o diretório

crie a pasta teste no raiz
e use o path c:\teste

já tive muitos problemas por instalar produtos oracle na pasta arquivos e programas.. acho que no mundo oracle pastas com espaços em branco não funciona muito bem não

braço
eduardo.d2
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 67
Registrado em: Ter, 08 Jan 2008 9:13 pm
Localização: são paulo
Eduardo Andrade

Selecionar tudo

DECLARE

L_BLOB BLOB;
L_BFILE BFILE;

BEGIN
INSERT INTO CLIENTESFOTO(CODIGO,
                         FOTO)
VALUES (01,
        EMPTY_BLOB())
RETURNING CLIENTESFOTO INTO L_BLOB;

L_BFILE := BFILENAME('DIR_IMAGEN','kenshin_17_1024.JPEG');

DBMS_LOB.FILEOPEN(L_BFILE);
DBMS_LOB.loadfromfile(L_BLOB,L_BFILE,DBMS_LOB.GETLENGTH(L_BFILE));
DBMS_LOB.fileclose(L_BFILE);

END; 


esta retornando esse erro
Error starting at line 1 in command:

Selecionar tudo

DECLARE

L_BLOB BLOB;
L_BFILE BFILE;

BEGIN
INSERT INTO CLIENTESFOTO(CODIGO,
                         FOTO)
VALUES (01,
        EMPTY_BLOB())
RETURNING CLIENTESFOTO INTO L_BLOB;

L_BFILE := BFILENAME('DIR_IMAGEN','kenshin_17_1024.JPEG');

DBMS_LOB.FILEOPEN(L_BFILE);
DBMS_LOB.loadfromfile(L_BLOB,L_BFILE,DBMS_LOB.GETLENGTH(L_BFILE));
DBMS_LOB.fileclose(L_BFILE);

END; 
Error report:
ORA-06550: linha 11, coluna 11:
PL/SQL: ORA-00904: "CLIENTESFOTO": identificador inválido
ORA-06550: linha 7, coluna 1:
PL/SQL: SQL Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother, beleza?

Então, você está dando o RETURNING da tabela toda (CLIENTESFOTO) na variável LOB (L_BLOB).

Veja este exemplo abaixo:
http://glufke.net/oracle/viewtopic.php?t=268&highlight=returning.

Você deve dar o retorno de 1 campo numa variável e, caso tenha mais de um campo, o returning em N variáveis.

qualquer coisa, manda ai.
eduardo.d2
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 67
Registrado em: Ter, 08 Jan 2008 9:13 pm
Localização: são paulo
Eduardo Andrade

Mano !! não entendi tem como explicar novamente ?

valeu !!!
Responder
  • Informação
  • Quem está online

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