O meu problema é o seguinte:
Estou a tentar criar um procedimento para inserir ficheiros na base de dados mas não se tem demonstrado fácil…
Criei vários procedimentos semelhantes, mas obtenho sempre o mesmo erro. Um dos procedimentos é o seguinte:
PROCEDURE INSERT_ARQ_LOB ( Diretorio varchar2, arquivo varchar2) is
doc blob;
V_ARQUIVO bfile;
V_CAMPO_LOB blob;
V_TAM_ARQUIVO integer;
begin
V_ARQUIVO:=bfilename(Diretorio,Arquivo);
dbms_lob.fileopen ( V_ARQUIVO, dbms_lob.file_readonly );
V_TAM_ARQUIVO:=dbms_lob.getlength(V_ARQUIVO);
insert into teste_blob(id,nome,ficheiro) values (1,arquivo,empty_blob())
returning ficheiro into V_CAMPO_LOB;
dbms_lob.loadfromfile(V_CAMPO_LOB,V_ARQUIVO,V_TAM_ARQUIVO);
dbms_lob.fileclose(V_ARQUIVO);
commit;
end;
Quando lhe passo um caminho da minha máquina,
begin
INSERT_ARQ_LOB('C:\Documents and Settings\fpires\Ambiente de trabalho\CCP','concurso_publico.pdf');
end;
obtenho o seguinte erro:
11:29:01 ORA-00604: error occurred at recursive SQL level 1
11:29:01 ORA-01460: unimplemented or unreasonable conversion requested
11:29:01 ORA-06512: at "SYS.DBMS_LOB", line 504
11:29:01 ORA-06512: at "PK2000.INSERT_ARQ_LOB", line 9
11:29:01 ORA-06512: at line 2
Se lhe passar um caminho que eu defeni em dba_directories no servidor, obtenho este erro:
11:30:22 ORA-22285: non-existent directory or file for FILEOPEN operation
11:30:22 ORA-06512: at "SYS.DBMS_LOB", line 504
11:30:22 ORA-06512: at "PK2000.INSERT_ARQ_LOB", line 9
11:30:22 ORA-06512: at line 2
Eu confirmei que os ficheiros existem nas directorias mas não estou a ver qual será o problema…
Será que me podes ajudar?
A minha resposta:
Necessitas de 1º criar um objecto directory
CREATE DIRECTORY Diretorio AS '/bla/bla';
E usas esse objecto no V_ARQUIVO:=bfilename(Diretorio,Arquivo);
As directorias são no servidor e necessitas de ter permissão de “create directory”
Outra questão se seguiu:
Não é possível carregar o ficheiro directamente da máquina do cliente certo? Então terei que o enviar temporariamente para a directoria definida na tabela dba_directories para depois ser guardado na BD correcto? Qual será a melhor forma de fazer isto?
A minha resposta:
No meu ambiente usamos o Oracle WebServer e programaticamente torna-se possível (via formulário Web) colocar ficheiros na BD
(usando PL/SQL).
Também é possível via programação de uma aplicação cliente em java, .net por exemplo (usando ODBC,…).
Tb é possível usado o MS Access.
No caso de usares Oracle Forms tens de usar o “add–on” Webutil.
Este deve ser instalado no servidor e vai fazer com que o cliente faça load de classes java e disponibiliza varia funções/procedimentos nos forms em PL/SQL.
Entre as carateristicas principais saliento a interação com o cliente (ler/escrever ficheiros na maquina cliente) e interacção com OLE2 (produção de documentos em Word/Excel)
No comments:
Post a Comment
Os comentários são moderados.
The comments are moderated.