gravar imagem jpg no banco tem como?
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:
inserindo imagens no oracle...
você falou de relacionamento.. pode ser um campo na tabela de produtos..BLOB é o tipo recomendado. Não é difícil (e é claro, absolutamente TODOS os procedimentos que vou usar aqui estão DOCUMENTADOS nos manuais, no caso o manual "Oracle Application Developer's Guide - Large Objects (LOBs)".
Antes do exemplo, UM AVISO : o sql*plus é uma tool DE SERVIDOR, cujas linguagens internas (SQL, PL/SQL, Java com JVM Oracle interno) rodam apenas NO SERVIDOR, portanto com ela você conseguirá ler & gravar numa tabela apenas arquivos que :
a) estejam NO SERVIDOR, e
b) residam em diretório PERMITIDOS ao usuário que innstalou e possui o soft Oracle, e
c) tenham PERMISSÃO de leitura.
CASO você queira acessar arquivos que estejam numa máquina-cliente, via sqlplus NÂO conseguirá, aí OU você os transfere (via ftp, talvez) pro servidor OU usa uma tool/linguagem cliente (pode ser Forms, pro*C, Java, VB, Delphi, n outras). O exemplo via plus :
serv:/home/oracle>ls -ltr *.jpg -rw-r----- 1 oracle dba 262903 Jun 9 11:19 povo_do_live.jpg serv:/home/oracle> system:SQL>create table demo_figuras 2 ( id_figura number primary key, 3 figura blob 4 ) 5 / Tabela criada. system:SQL>create or replace directory DIR_FIGURAS as '/home/oracle'; Diretório criado. system:SQL>declare 2 l_blob blob; 3 l_bfile bfile; 4 begin 5 insert into demo_figuras values ( 1, empty_blob() ) 6 returning figura into l_blob; 7 l_bfile := bfilename( 'DIR_FIGURAS', 'povo_do_live.jpg' ); 8 dbms_lob.fileopen( l_bfile ); 9 dbms_lob.loadfromfile( l_blob, l_bfile, dbms_lob.getlength( l_bfile ) ); 10 dbms_lob.fileclose( l_bfile ); 11 end; 12 / Procedimento PL/SQL concluído com sucesso. system:SQL>select id_figura, dbms_lob.getlength(figura) BYTES_GRAVADOS 2 from demo_figuras; ID_FIGURA BYTES_GRAVADOS ---------- -------------- 1 262903 system:SQL>
-
- Rank: Programador Sênior
- Mensagens: 46
- Registrado em: Sex, 23 Nov 2007 9:26 am
- Localização: porto velho -ro
amigo ,esta dando error na hora d passar os parametros para a procedure que eu crie
o erro ORA-01003 no statement pased
create or replace procedure Pr_Carregar_imagem(p_arquivo in varchar2, pcd_produto_ in varchar2, p_tipo in varchar2) is
MeuBlob Blob;
MeuArq BFile;
begin
if p_Tipo = 'I' then --imagens armazenadas no banco
insert into TT_IAMGENS_PRODUTOS(cd_produto, IMAGEM_DESC_PROD, tipo)
values (pcd_produto_, empty_blob(), p_Tipo)
returning IMAGEM_DESC_PROD into MeuBlob;
MeuArq := bfilename('DIR_IMAGENS_PROD',p_arquivo);
DBMS_LOB.fileopen(MeuArq);
--------------- DBMS_LOB.loadfromfile(dest_lob, MeuBlob, src_lob , MeuArq, amount, DBMS_LOB.getlength(MeuArq));
dbms_lob.loadfromfile( MeuBlob, MeuArq, dbms_lob.getlength( MeuArq) );
DBMS_LOB.fileclose(MeuArq);
elsif p_Tipo = 'E' then --imagens externas
insert into TT_IAMGENS_PRODUTOS(cd_produto, IMAGEM_EXT, tipo)
values (pcd_produto_, bfilename('DIR_IMAGENS_PROD',p_arquivo), p_tipo);
end if;
commit work;
end Pr_Carregar_imagem;
/
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:
ORA-01003: no statement parsed
Cause: A host language program call referenced a cursor with no associated parsed SQL statement. A SQL call (for example, OSQL3) must be used to pass a SQL statement to Oracle and to associate the statement with an open cursor. A cursor must already have an associated SQL statement if referenced in any of the following calls: DESCRIBE, NAME, DEFINE, BIND, EXECUTE, and FETCH.
Action: Do the SQL call, for example, OSQL, to pass the required SQL statement before referencing the cursor.
então brother...
pelo que entendi o erro está em um cursor do seu programa que chama esta procedure e não nessa procedure que você postou ai..
você debugou seu programa? cade a rotina que chama essa sua procedure?
-
- Rank: Programador Sênior
- Mensagens: 46
- Registrado em: Sex, 23 Nov 2007 9:26 am
- Localização: porto velho -ro
amigo eu fiz assim a chamada da procedure
StpPrcarregaImg.Prepare;
StpPrcarregaImg.ParamByName('P_ARQUIVO').AsString:=Trim(EditArquivo.Text);
StpPrcarregaImg.ParamByName('PCD_PRODUTO_').AsString:=Trim(EditProduto.Text);
StpPrcarregaImg.ParamByName('P_TIPO').AsString:=Trim(EditTipo.Text);
StpPrcarregaImg.ExecProc;
StpPrcarregaImg.UnPrepare;
-
- Rank: Programador Sênior
- Mensagens: 46
- Registrado em: Sex, 23 Nov 2007 9:26 am
- Localização: porto velho -ro
Hugo, eu conseguir inserir direto no sql plus, eu fiz assim
agora ,como você disse pra mim poder visualizar no meu form essa foto , como e que eu poderia mesmo. eu uso o delphi 2006
insert into TT_IAMGENS_PRODUTOS(cd_produto,IMAGEM_EXT, tipo)
values ('35905005',bfilename('DIR_IMAGENS_PROD','Arroz Koblenz.jpg'), 'E');
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:
bom... você quer saber como exibir em um form a imagem que recuperou do banco, e isso em delphi?
acho q vai te ajudar..
http://www.delphi-central.com/BitmapShapedForm.aspx
http://en.allexperts.com/q/Delphi-1595/ ... ages.htm#b
http://www.mail-archive.com/delphi-br@y ... 66276.html
acho q vai te ajudar..
http://www.delphi-central.com/BitmapShapedForm.aspx
http://en.allexperts.com/q/Delphi-1595/ ... ages.htm#b
http://www.mail-archive.com/delphi-br@y ... 66276.html
-
- Rank: Programador Sênior
- Mensagens: 46
- Registrado em: Sex, 23 Nov 2007 9:26 am
- Localização: porto velho -ro
Amigo eu me enganei , eu pensei que o insert ai de cima , estava incluindo as fotos, eu verifiquei com a dica que você me passou e esta dando o erro
ora-222888 , você tamebm poderia me informa como eu crio diretorio direto no servidor?
ora-222888 , você tamebm poderia me informa como eu crio diretorio direto no servidor?
-
- Moderador
- Mensagens: 1396
- Registrado em: Sex, 01 Fev 2008 2:06 pm
- Localização: Rio de Janeiro - RJ
- Contato:
que bom brother
parabens!
parabens!
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 14 visitantes