erro ao abrir arquivo (utl_file

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

galera alguém já teve esse erro ao criar um arquivo

Selecionar tudo

  1  DECLARE
  2  TEXTO UTL_FILE.FILE_TYPE ;
  3  VAR VARCHAR2(1022);
  4  BEGIN
  5  TEXTO := UTL_FILE.FOPEN( 'C:\' , 'TESTE.TXT' , 'A' );
  6  UTL_FILE.PUT_LINE (TEXTO, 'TESTE DE GRAVAÇÃO 1');
  7  UTL_FILE.FFLUSH(TEXTO);
  8  UTL_FILE.FCLOSE(TEXTO);
  9* END;
 10  /

DECLARE
*
ERRO na linha 1:
ORA-29283: operação de arquivo inválida
ORA-06512: em "SYS.UTL_FILE", line 18
ORA-06512: em "SYS.UTL_FILE", line 439
ORA-29283: operação de arquivo inválida
ORA-06512: em line 5


no oracle 9i..
alguém tem alguma sugestao ou algo q eu possa verificar...
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, muito estranho...
Pelo que entendi, ele está barrando (apontando erro) logo após DECLARE.

Pra ter certeza, tenta rodar esse código abaixo:

Selecionar tudo

   DECLARE 
       TEXTO UTL_FILE.FILE_TYPE ; 
       VAR   VARCHAR2(1022); 
    BEGIN 
       dbms_output.put_line('teste ');
/*
       TEXTO := UTL_FILE.FOPEN( 'D:\Temp' , 'TESTE.TXT' , 'A' ); 
       UTL_FILE.PUT_LINE (TEXTO, 'TESTE DE GRAVAÇÃO 1'); 
       UTL_FILE.FFLUSH(TEXTO); 
       UTL_FILE.FCLOSE(TEXTO); 
*/       
   END; 
Só pra ver, se o erro não está em:

Selecionar tudo

TEXTO UTL_FILE.FILE_TYPE ; 
Ou seja, analisar se teu user tem permissão de acesso à package utl_file do Oracle.
Julian Campagnoli
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 82
Registrado em: Ter, 26 Fev 2008 11:33 am
Localização: MG e SP
Julian de A. Campagnoli
Treinee, Desenvolvedor Oracle PL-SQL

Brother, beleza ????

Executei seu codigo aqui na versao 10g e funcionou corretamente. Criou e escreveu normalmente.

Obs.: Verifique se o DIRETORIO,

Bem estranho ... pois a sintaxe esta correta

Abraço
cron_rj
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 25
Registrado em: Qua, 19 Dez 2007 9:10 am
Localização: Rio de Janeiro RJ

Pelo o que eu vi o parâmetro 'A' está estranho , o correto para inserir um texto em um novo arquivo seria abrir o arquivo com 'w' (write) e com a letra minuscula sempre.

Selecionar tudo

TEXTO := UTL_FILE.FOPEN( 'D:\Temp' , 'TESTE.TXT' , 'w' ); 
Não sei o que o 'A' quer dizer , mas se existir tente usar minusculo.
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

tentei aqui novamente...

Selecionar tudo

DECLARE
   TEXTO UTL_FILE.FILE_TYPE ;
    VAR VARCHAR2(1022);
    BEGIN
    TEXTO := UTL_FILE.FOPEN( CAMINHO , 'TESTE.TXT' , 'w' );
    UTL_FILE.PUT_LINE (TEXTO, 'TESTE DE GRAVAÇÃO 1');
    UTL_FILE.FFLUSH(TEXTO);
    UTL_FILE.FCLOSE(TEXTO);
   END;

ORA-29283: operação de arquivo inválida
ORA-06512: em "SYS.UTL_FILE", line 449
ORA-29283: operação de arquivo inválida
ORA-06512: em line 5
uma pergunta... se ele não estiver conseguindo localizar o "caminho" ele daria outro erro certo?

tentei criar tambem um diretorio no banco.."create directory....."

mesmo assim da o mesmo erro

seria algum parametro do banco???

fiz um select q eu encontrei em outo topico... de uma tabela de parametro para utl_file_dir a coluna value dele me retornou "*"



vlw
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

Então brother,

Uma dica sobre o Directory: Quando criá-lo, criar, obrigatóriamente, em letras maiúsculas, senão dá erro.

Não sei se nestas versões mais novas do banco, essa "situação" foi corrigida, mas, sei q na 9i e anteriores, se criar um directory, com o nome dele (do directory) em minúsculo, não funciona.

Agora, sobre este erro em específico, vou dar uma vasculhada e lhe respondo.
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, seguinte:

Dei uma pesquisada e, este erro deve-se ao caminho do diretório.
ORA-29283: invalid file operation

Cause: An attempt was made to read from a file or directory that does not exist, or file or directory access was denied by the operating system.

Action: Verify file and directory access privileges on the file system, and if reading, verify that the file exists.
Faça um teste:
-Crie um DIRECTORY (com o SYS), dando permissões de READ e WRITE pro teu usuário;
-Utilize este diretório no teu exemplo e, coloque as Exceptions pertinentes ao pacote UTL_FILE, que estão no link abaixo, aqui no próprio fórum:

http://www.glufke.net/oracle/viewtopic. ... nvalidpath

qualquer coisa, manda pra gente beleza?
rodfbar
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 241
Registrado em: Ter, 09 Out 2007 11:15 am
Localização: Batatais - SP

vlw galera... vou fazer mais alguns testes aqui...

é q nunca mexi com o utl_file, porisso to meio perdito...


mas acho q vai ser isso de não ter acesso o diretorio... porque da minha maquina eu tenho o acesso.. mas do banco não...

um cara aqui me disse q o banco deve ter acesso a esta maquina pois é ele q escreve o arquivo... e não o client...

obrigado pela ajuda...
abrçs
wmendes.miranda
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Qui, 26 Ago 2010 10:51 am
Localização: São Paulo
Contato:

Oi galera tudo bem?

Estava dando uma olhada e acredito que o problema neste tópico é o mesmo que eu passo, porém eu não consigo resolver.
Estava tentando criar uma procedure que fizesse um arquivo de log bem simples, segue o código abaixo:

Selecionar tudo

CREATE OR REPLACE PROCEDURE PROC_ARQUIVO_LOG
                                    (vTABELA VARCHAR2, vUSUARIO VARCHAR2, vACAO VARCHAR2) IS

vFILE_SAIDA UTL_FILE.FILE_TYPE;
            
 BEGIN

-- DEFININDO O LOCAL ONDE SERÁ ARMAZENADO O LOG E FORMA INCREMENTAL
    vFILE_SAIDA := SYS.UTL_FILE.FOPEN ('C:\ORACLE', 'LOG.txt', 'A');
    
 -- GRAVANDO A LINHA
    UTL_FILE.PUT_LINE (vFILE_SAIDA, 'O USUÁRIO '||TO_CHAR(vUSUARIO)||' FEZ A SEGUINTE ACAO: '||TO_CHAR(vACAO)||' NA TABELA ') ;
 -- ESVAZIANDO O BUFFER DE MEMORIA
    UTL_FILE.FFLUSH(vFILE_SAIDA);
 -- FECHANDO O ARQUIVO
    UTL_FILE.FCLOSE;
 
END PROC_ARQUIVO_LOG;
/
e ela me apresentou os seguinte erro:
PLS-00201
fui verificar a minha variavel utl no ambiente e com o select abaixo:

Selecionar tudo

select value from v$parameter where name = 'utl_file_dir';
o retorno foi nada, loguei com o usuário SYS e tentai dar o seguinte update neste view

Selecionar tudo

 update v$parameter
set value ='C:\oraclexe\app\oracle\admin\utl'
where name = 'utl_file_dir';
porém o retorno foi o seguinte:
ORA-02030: só é possível selecionar a partir de tabelas/views fixas

Eu gostaria da ajuda de vocês para conseguir setar esse campo, se vocês souberem qual tabela devo acessar para fazer essa alteração será de grande ajuda.

Desde já agradeço
wmendes.miranda
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Qui, 26 Ago 2010 10:51 am
Localização: São Paulo
Contato:

Galera,

Valeu mas já consegui resolver o problema dei uma vasculhada melhor pelo forum e vi a resposta neste tópico
http://glufke.net/oracle/viewtopic.php? ... hlight=utl

Mas de qualquer forma valeu.
wmendes.miranda
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 11
Registrado em: Qui, 26 Ago 2010 10:51 am
Localização: São Paulo
Contato:

hehe
tive que voltar,
consegui setar o meu utl file,
mas a minha procedure continua dando o mesmo erro:

PLS-00201: identifier 'string' must be declared
Responder
  • Informação
  • Quem está online

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