Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Akropol

UTL_FILE - (Rodrigo Almeida) ou quem puder r !!&#

Recommended Posts

Estou tendo um problema em relação a criar txt no Oracle, li seus artigos sobre UTL_FILE e são muito bons.(Rodrigo Almeida)Tentei implementar alguns de seus exemplos (Rodrigo Almeida) e não estou conseguindo gerar os arquivos.Vou especificar as modificações que fiz nos arquivos.Primeiro, eu não sou o server e o arquivo INIT.ORA no server estava INITDW.ORA, então fiz as configurações e renomeei pra INIT.ORA, o banco que tenho acesso no server se chama cummins.compatible = 9.0optimizer_features_enabled = 9.0db_name = cumminsutl_file_dir = *Depois tentei executar o seu primeiro exemplo e exibe o seguinte erro.ERRO na linha 6:ORA-06550: linha 6, coluna 10:PLS-00103: Encontrado o símbolo "." quando um dos seguintes símbolos eraesperado:constant exception <an identifier><a double-quoted delimited-identifier> table LONG_ double refchar time timestamp interval date binary national characterncharO símbolo "<an identifier>" foi substituído por "." para continuar.ORA-06550: linha 7, coluna 10:PLS-00103: Encontrado o símbolo "." quando um dos seguintes símbolos eraesperado:constant exception <an identifier><a double-quoted delimited-identifier> table LONG_ double refchar time timestamp interval date binary nationaORA-06550: linha 8, coluna 10:PLS-00103: Encontrado o símbolo "." quando um dos seguintes símbolos eraesperado:constant exception <an identifier><a double-quoted delimited-identifier> table LONG_ double refchar time timestamp interval date binary nationaORA-06550: linha 9, coluna 1:PLS-00103: Encontrado o símbolo "END" quando um dos seguintes símbolos eraesperado:beginSegue o exemplo:DECLARE TEXTO UTL_FILE.FILE_TYPE; VAR VARCHAR2(1022);BEGIM TEXTO := UTL_FILE.FOPEN('c:\','TESTE.TXT','A'); UTL_FILE.PUT_LINE(TEXTO, 'TESTE DE GRAVAÇÃO 1'); UTL_FILE.FFLUSH(TEXTO); UTL_FILE.FCLOSE(TEXTO);END;/Por favor no aguardo.Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara,

 

O script esta errado, presta atencao no seu BEGIM. O nome exata e BEGIN.

 

Vai uns exemplos abaixo:

 

Leitura:

set serveroutput on

DECLARE

arquivo_ler UTL_File.File_Type;

Linha Varchar2(100);

BEGIN

arquivo_ler := UTL_File.Fopen('c:/oracle','teste.sql', 'r');

-- Loop

UTL_File.Get_Line(arquivo_ler, Linha);

Dbms_Output.Put_Line(Linha);

-- End Loop;

 

UTL_File.Fclose(arquivo_ler);

Dbms_Output.Put_Line('-----');

Dbms_Output.Put_Line('Arquivo processado com sucesso!!!');

EXCEPTION

WHEN No_data_found THEN

UTL_File.Fclose(arquivo_ler);

Commit;

WHEN UTL_FILE.INVALID_PATH THEN

Dbms_Output.Put_Line('Diretório inválido.');

UTL_File.Fclose(arquivo_ler);

WHEN Others THEN

Dbms_Output.Put_Line ('Problemas na leitura do arquivo.');

UTL_File.Fclose(arquivo_ler);

END;

/

 

 

Escrita:

set serveroutput on

DECLARE

arquivo_ler UTL_File.File_Type;

Linha Varchar2(100);

BEGIN

arquivo_ler := UTL_File.Fopen('c:\oracle','teste.sql', 'w');

-- Loop

UTL_File.Put_Line(arquivo_ler, 'teste');

Dbms_Output.Put_Line(Linha);

-- End Loop;

 

UTL_File.Fclose(arquivo_ler);

Dbms_Output.Put_Line('-----');

Dbms_Output.Put_Line('Arquivo processado com sucesso.');

EXCEPTION

WHEN No_data_found THEN

UTL_File.Fclose(arquivo_ler);

Commit;

WHEN UTL_FILE.INVALID_PATH THEN

Dbms_Output.Put_Line('Diretório inválido.');

UTL_File.Fclose(arquivo_ler);

WHEN Others THEN

Dbms_Output.Put_Line ('Problemas na leitura do arquivo.');

UTL_File.Fclose(arquivo_ler);

END;

 

 

BEGIN

EXECUTE IMMEDIATE 'create table aaaa (id number, nome varchar2(100))';

END;

/

 

 

Qualquer duvida manda ai!!!

 

 

http://forum.imasters.com.br/public/style_emoticons/default/clap.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado, Bruno.

 

Colocando em prática seu exemplo ele emite a mensagem:

 

Diretório inválido.

 

Procedimento PL/SQL concluído com sucesso.

 

Com o meu exemplo corrigido o Begin ele também emite uma mensagem de erro:

 

SQL> DECLARE

2 TEXTO UTL_FILE.FILE_TYPE;

3 VAR VARCHAR2(1022);

4 BEGIN

5 TEXTO := UTL_FILE.FOPEN('c:\','TESTE.TXT','W');

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-29280: caminho de diretório inválido

ORA-06512: em "SYS.UTL_FILE", line 18

ORA-06512: em "SYS.UTL_FILE", line 424

ORA-06512: em line 5

 

 

Qual será o problema, alguma configuração no INIT.ORA?

Outra duvida, se o arquivo gerado será no server ou em minha máquina client?

 

Obrigado.

 

Marcelo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcelo,

 

Seguinte, primeiramente entre no SQL*PLUS e dê um:

 

SQL > show parameters utl

Depois veja o valor que ele irá apresentar, pois você modificou alguns parametros do INIT.ORA

 

Com isso veja se seu usuário tem permissões para gravação no C:\.

 

Crie um diretorio qualquer no C:\ chamado TESTE_UTL, clique com o botão direito e em segurança passe todos as opções a TODOS OS USUÁRIOS

 

No seu SCRIPT PL/SQL faça essa modificação:

 

SQL> DECLARE2 TEXTO UTL_FILE.FILE_TYPE;3 VAR VARCHAR2(1022);4 BEGIN5 TEXTO := UTL_FILE.FOPEN('C:\TESTE_UTL','TESTE.TXT','A');6 UTL_FILE.PUT_LINE(TEXTO, 'TESTE DE GRAVAÇÃO');7 UTL_FILE.FFLUSH(TEXTO);8 UTL_FILE.FCLOSE(TEXTO);9 END;10 /

E poste caso tenha dúvidas ou problemas.

 

Abraços, http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então Rodrigo continuo no problema, fiz o que você sugeriu no comando:

 

SQL > show parameters utl

 

aparece:

 

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

utl_file_dir string

cara vou falar a real sou novo em banco de dados, me jogaram em em projeto aqui na minha empresa, e falaram se vira.

 

Então pelo que entendi a permissão é se o caminho utl_file_dir = * esteja dessa forma, isso ou estou enganado.

 

Depois tentei rodar o script que você relacionou e aparece:

 

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

 

Acho q estou mais perdido q cego em tiroteio, não sei mais o que fazer. E veja bem, o que preciso fazer parece ser tão simples criar uma procedure para ler algumas tabelas e gerar um arquivo txt e depois o inverso ler um txt e gravar no banco, mas não sai do lugar.

 

Marcelo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum,

 

faz o seguinte:

 

1) Executa o comando

alter system set utl_file_dir='*' scope=spfile

 

2) reinicia o Banco de dados

 

3) testa

 

Acho que isso vai acabar com seu problema!!

 

 

http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

:blink:

Bruno continua o mesmo problema.

 

 

Com o script:

 

DECLARE

TEXTO UTL_FILE.FILE_TYPE;

VAR VARCHAR2(1022);

BEGIN

TEXTO := UTL_FILE.FOPEN('c:\teste_utl','TESTE.TXT','A');

UTL_FILE.PUT_LINE(TEXTO, 'TESTE DE GRAVAÇÃO');

UTL_FILE.FFLUSH(TEXTO);

UTL_FILE.FCLOSE(TEXTO);

END;

/

 

 

Ele informa esse erro:

 

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

 

 

Com o script:

 

set serveroutput on

DECLARE

arquivo_ler UTL_File.File_Type;

Linha Varchar2(100);

BEGIN

arquivo_ler := UTL_File.Fopen('c:\teste_utl','teste.txt', 'a');

-- Loop

UTL_File.Put_Line(arquivo_ler, 'teste');

Dbms_Output.Put_Line(Linha);

-- End Loop;

 

UTL_File.Fclose(arquivo_ler);

Dbms_Output.Put_Line('-----');

Dbms_Output.Put_Line('Arquivo processado com sucesso.');

EXCEPTION

WHEN No_data_found THEN

UTL_File.Fclose(arquivo_ler);

Commit;

WHEN UTL_FILE.INVALID_PATH THEN

Dbms_Output.Put_Line('Diretório inválido.');

UTL_File.Fclose(arquivo_ler);

WHEN Others THEN

Dbms_Output.Put_Line ('Problemas na leitura do arquivo.');

UTL_File.Fclose(arquivo_ler);

END;

 

 

Ele informa esse erro:

 

Problemas na leitura do arquivo.

 

Procedimento PL/SQL concluído com sucesso.

 

http://forum.imasters.com.br/public/style_emoticons/default/sick.gif

 

Marcelo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Marcelo,O codigo esta certo, testei aqui na minha maquina e deu certo.1) Qual o banco de dados que você esta usando???2) Como esta o parametro do seu banco de dados utl_file_dir ???3) o pacote utl_file esta funcionando corretamente(compilado) ???Roda esse script como sys e reinicia o banco de dados:alter system set utl_file_dir='c:\','d:\','*' scope=spfileEstou no aguardo!! :wacko:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi pessoal, eu estou com o mesmo problema.está dando o mesmo erro na linhaarquivo_ler := UTL_File.Fopen('c:/oracle','teste.sql', 'r');só que ao invés de usar ".sql" estou usando o ".csv" que é a extensão do excel para colocar os ponto-e-vírgula depois de cada coluna??Será que pode ser isso??Eu li a cima, a parte do usuário SYS, só que aqui eu não tenho permissão, e claro, todo mundo diz que não sabe e fico eu nessa roubado.Fico grato se alguém puder me ajudar.Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá, era esse aqui abaixoError -29283: ORA-29283: invalid file operationORA-06512: at "SYS.UTL_FILE", line 475ORA-29283: invalid file operationmas mudei de idéia, aqui até dá para fazer funcionando como foi falado a cima. Mas quando for fazer para o cliente, não vai ser o DBA, aí não vai ter acesso ao servidor. Vou fazer usando o Text_IO, pelo menos aprendi bastante coisa sobre o ITL_FILE, fica para a próxima.Valeu!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.