Akropol 0 Denunciar post Postado Julho 25, 2006 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
MonTiLLa 1 Denunciar post Postado Julho 25, 2006 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
Akropol 0 Denunciar post Postado Julho 25, 2006 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
alphamek 2 Denunciar post Postado Julho 26, 2006 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
Akropol 0 Denunciar post Postado Julho 26, 2006 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
MonTiLLa 1 Denunciar post Postado Julho 26, 2006 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
Akropol 0 Denunciar post Postado Julho 27, 2006 :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
MonTiLLa 1 Denunciar post Postado Julho 27, 2006 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
Akropol 0 Denunciar post Postado Julho 27, 2006 :D Agora foi Bruno, muito obrigado. Tive que reniciar a máquina(server) duas vezes, mas foi. Valeu, cara !!! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites
MonTiLLa 1 Denunciar post Postado Julho 27, 2006 beleza Cara!!! Qualquer duvida pode criar outro topico ai que a Comunidade ajuda!!! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif http://forum.imasters.com.br/public/style_emoticons/default/joia.gif Compartilhar este post Link para o post Compartilhar em outros sites
alphamek 2 Denunciar post Postado Julho 28, 2006 http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
NaPraia 12 Denunciar post Postado Dezembro 5, 2006 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
Motta 645 Denunciar post Postado Dezembro 5, 2006 Qual erro que dá ? Compartilhar este post Link para o post Compartilhar em outros sites
NaPraia 12 Denunciar post Postado Dezembro 5, 2006 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