Erro ao criar arquivo via procedure com 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
pyro
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 323
Registrado em: Qui, 21 Set 2006 10:21 am
Localização: Barala - TT

Pessoal estou criando um arquivo texto comum com informações de algumas tabelas, para isso eu fiz um procedure e testando esse procedure percebi que ela dispara um exception na seguinte linha:

Selecionar tudo

arq := utl_file.fopen(p_pasta, nome, 'w');
Já fiz isso outras vezes e funcionou legal. Alguém tem alguma dica? Pois uso a ferramenta PL/SQL e não vi onde ela está retornando algum código para esse erro.
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, P_pasta e nome vem vindo valor?

Selecionar tudo

 UTL_FILE.FOPEN(vDIR, 'ARQ03.TXT','w')
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

1. Verifique se a pastas sendo gravada possui permissão
2. Verifique se o parâmtro do banco UTL_FILE_DIR está configurado pra essa pasta.
3. Coloque os exceptions pra descobrir qual é o problema.
http://www.glufke.net/oracle/viewtopic.php?t=381

É isso ! Deve ser uma dessas coisas!
pyro
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 323
Registrado em: Qui, 21 Set 2006 10:21 am
Localização: Barala - TT

Cara é o seguinte para testes estou tentando gravar o arquivo na minha máquina local (máquina de desenvolvimento), isso pode dar algum problema?

Coloquei as exceptions que você indicou e disparou a invalid_operation. Agora não sei o que pode estar ocorrendo para corrigi-la.

Vlw.
pyro
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 323
Registrado em: Qui, 21 Set 2006 10:21 am
Localização: Barala - TT

Esqueci de escrever no outro tópico, a variável p_pasta recebe um valor de uma path da minha máquina de desenvolvimento, tipo: c:\pasta
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Veja:
pyro escreveu:Esqueci de escrever no outro tópico, a variável p_pasta recebe um valor de uma path da minha máquina de desenvolvimento, tipo: c:\pasta
O UTL_FILE não faz isso ! O UTL_FILE grava no mesmo computador que o BANCO ORACLE está instalado.

Pra gravar localmente, o procedimento é outro. Vai depender de qual ferramenta está rodando aí. (Se é Forms até 6i, usa-se TEXT_IO, se é Forms WEB usa-se as ferramentas da WEBUTIL. Se é alguma outra linguagem, vai depender dos comandos dessa linguagem, etc).
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,

você deu uma olhada no teu UTL_FILE_DIR, como citado pelo Dr. Gori?
Outra coisa, sobre o INVALID_OPERATION, dê uma olhada neste link que pode ajudá-lo: http://www.glufke.net/oracle/viewtopic.php?t=381&highlight=invalidoperation
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

Outra situação à ser verificada brother, conforme o site Orafaq.com:

from oracle documentation;

Selecionar tudo

AMD-00113: PROCEDURE string, invalid operation 
Cause: UTL_FILE.INVALID_OPERATION: An error occurred when accessing a file.
Action: Check that the file being accessed is not already opened by another program, then retry.
Try at OS level, move or rename flat file [finename.ext]. If you can not do it then file is still locked.

Fonte: http://www.orafaq.com/forum/t/68418/2/

Digo isso porquê me deparei com uma situação em que, o erro era no meu arquivo do sistema operacional (ficou aberto quando travou a máquina) e, tive que utilizar um outro nome, aí funcionou legal.

Depois de um shutdown/restart no meu micro, eliminei o arquivo anterior (corrompido) e ok.
pyro
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 323
Registrado em: Qui, 21 Set 2006 10:21 am
Localização: Barala - TT

Pessoal vendo as dicas postadas eu criei uma pasta com permissão de escrita para o mesmo servidor que está o banco, a pasta está vazia (sem o problema citado de arquivo corrompido) e o erro continua. Sinistro.
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, dá uma olhada nesta documentação da Oracle que, com certeza irá resolver teus problemas...

Tem tudo detalhado sobre a package UTL_FILE.

Clique neste link.
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

Veja:
dr_gori escreveu:1. Verifique se a pastas sendo gravada possui permissão
2. Verifique se o parâmtro do banco UTL_FILE_DIR está configurado pra essa pasta.
3. Coloque os exceptions pra descobrir qual é o problema.
http://www.glufke.net/oracle/viewtopic.php?t=381
Eu mesmo citei isso antes:
Viu se o usuário ORACLE tem permissão pra gravar no diretório?
Viu se o parâmetro do banco APONTA pra essa pasta OU uma pasta anterior a ela?

Selecionar tudo

SQL> SELECT * FROM V$PARAMETER
  2  WHERE name like 'utl%'
  3  /

       NUM NAME                                                                   TYPE VALUE                                            
---------- ---------------------------------------------------------------- ---------- -------------
       440 utl_file_dir                                                              2 /Comercial/Shells, /Outros, /Outros/GerCRD, /SGL

SQL> 
Veja no meu select acima que o UTL_FILE só tem permissão pra gravar naqueles diretórios citados ali!
Por que isso?
Senão, qualquer um criava um programa pra acessar os diretórios protegidos do S.O. pelo Oracle, bastando pra isso criar um UTL_FILE que mexe em qualquer script.
Com esse parâmetro, o ORACLE só pode acessar textos pra LEITURA/GRAVAÇÃO destes diretórios citados...

Não tem erro, APOSTO todas minhas fichas que é uma dessas 3 coisas acima. Pra descobrir, basta colocar os exceptions! (todos exceptions citados no link). Assim você descobrirá o que está acontecendo errado.

Talvez você está colocando errado o diretório também.
pyro
Rank: DBA Sênior
Rank: DBA Sênior
Mensagens: 323
Registrado em: Qui, 21 Set 2006 10:21 am
Localização: Barala - TT

Coloquei todas as exceptions e depois de checar permissões em pastas, arrancar os cabelos, xingar a máquina e mastigar o teclado apaguei tudo e criei de novo.
Agora funciona, só não sei o porque. :lol:
Avatar do usuário
dr_gori
Moderador
Moderador
Mensagens: 5024
Registrado em: Seg, 03 Mai 2004 3:08 pm
Localização: Portland, OR USA
Contato:
Thomas F. G

Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered

HHAOAHOAHAOHAOHA

Mas é claro!!! Só faltou a galera dizer o mais básico: Pra funcionar tinha que dar 3 pulinhos, ir no banheiro e voltar, contar até 10 que daí ia funcionar ! :-D Anote a dica !!!! :-D
rafaelfrocha
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 45
Registrado em: Qua, 31 Out 2007 9:30 am
Localização: Uberlândia
Rafael Rocha

Pessoal,

Estou usando o UTL_FILE para gravar um arquivo XML no sistema operacional. O problema é que esta gravando o arquivo com o nome todo em UPPERCASE, e infelizmente não pode ser.

Alguém sabe o porque? Alguma opção no UTL_FILE para gerar o arquivo com o nome em lowercase?

tks
samea
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Sex, 20 Fev 2009 2:42 pm
Localização: manaus - Am
Sâmea Brazão

Oi gente estou querendo fazer a importação de um arquivo txt para o banco de dados oracle, eu uso PL/SQL alguém sabe me dizer como eu posso fazer isso?
Eu tentei fazer da seguente forma:

Selecionar tudo

LOAD DATA
INFILE 'teste.txt'
INTO TABLE samea_spc
TRUNCATE
FIELDS TERMINATED BY ';'
TRAILING NULLCOLS
(spc_id, spc_nome_cliente, spc_endereco_cliente, spc_cpf, spc_cgc, spc_bairro, spc_cep, spc_telefone, spc_data_vecimento, spc_data_compra, spc_valor_debito, spc_codigo_programa, spc_num_ligacao)
Mas da erro na primeira linha da erro no load alguém sabe me dizer o que esta errado ou se esta faltando alguma coisa?
Responder
  • Informação