› Fóruns › SQL e PL/SQL › Gravar arquivo com utl_file localmente
- Este tópico contém 3 respostas, 2 vozes e foi atualizado pela última vez 12 anos, 10 meses atrás por
rman.
-
AutorPosts
-
24 de julho de 2013 às 7:16 pm #105693
leo_jf
ParticipanteBoa Tarde prezados,
Tenho um usuario teste, com permissão de criar diretorio. Tentei realizar o seguinte teste:
create or replace directory TEMP_DIR
as ‘c:temp’;e depois executei o comando:
declare
v_arquivo utl_file.file_type;
begin
v_arquivo := utl_file.fopen(‘c:temp’, ‘arq_teste.txt’, ‘W’);
utl_file.put_line(v_arquivo, ‘linha 1’);
utl_file.put_line(v_arquivo, ‘linha 2’);
utl_file.put_line(v_arquivo, ‘linha 3’);
utl_file.put_line(v_arquivo, ‘linha 4’);
utl_file.put_line(v_arquivo, ‘linha 5’);
utl_file.fclose(v_arquivo);
exception
when utl_file.invalid_path then
raise_application_error(-20000, ‘Atenção! O diretório informado não existe.’);
end;entretanto é levantado o erro:
ORA-29283: operação de arquivo inválida
ORA-06512: em “SYS.UTL_FILE”, line 536
ORA-29283: operação de arquivo inválida
ORA-06512: em line 4Alguém sabe me dizer o que esta acontecendo?
obs:Quando é executado o comando SELECT * FROM V$PARAMETER
WHERE name like ‘utl%’, o value está com ‘*’;24 de julho de 2013 às 8:11 pm #105694rman
Participante@leo_jf
Você fez quase certo. Foi criado o objeto diretório mas você não utilizou.
v_arquivo := utl_file.fopen('TEMP_DIR', 'arq_teste.txt', 'W');
O primeiro parametro de utl_file.fopen é um varchar2 com o nome do objeto diretório e não um varchar2 com o path.
24 de julho de 2013 às 11:44 pm #105696leo_jf
Participanteola,
infelizmente troquei, mas ainda levanta erro:
declare
v_arquivo utl_file.file_type;
begin
v_arquivo := utl_file.fopen(‘TEMP_DIR’, ‘arq_teste.txt’, ‘W’);
utl_file.put_line(v_arquivo, ‘linha 1’);
utl_file.put_line(v_arquivo, ‘linha 2’);
utl_file.put_line(v_arquivo, ‘linha 3’);
utl_file.put_line(v_arquivo, ‘linha 4’);
utl_file.put_line(v_arquivo, ‘linha 5’);
utl_file.fclose(v_arquivo);
exception
when others then
raise_application_error(-20000, ‘Atenção! O diretório informado não existe.’);
end;A criação do diretório local precisa ser feita pelo sys do oracle?
Tenho que atribuir alguma permissão na pasta do windows?25 de julho de 2013 às 3:14 pm #105698rman
Participante@leo_jf
É necessário dar permissão de leitura e escrita para o usuário.
GRANT READ,WRITE ON DIRECTORY 'TEMP_DIR' TO USUARIO;
O diretório no sistema operacional deve ser feito pelo usuário que esteja no grupo ora_dba.
Outro detalhe importante, o DIRECTORY é canse sensitive, tente C:teste, com o C maisculo.
-
AutorPosts
- Você deve fazer login para responder a este tópico.
› Fóruns › SQL e PL/SQL › Gravar arquivo com utl_file localmente