Verificar o local de gravação do arquivo

Dicas do Oracle Forms Builder - Blocos, Itens, LOV, Canvas, Triggers, comandos, PLL, d2kwutil, FMB, Alert, menus, etc
Responder
marcelo0906
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 34
Registrado em: Qua, 02 Set 2009 3:29 pm
Localização: São José - SC

Pessoal boa tarde.

assim estou gerando um arquivo, a partir da execução de um script. que é chamado pelo sql plus, dentro do forms.

alguém sabe como faço para verificar se o local de geração de arquivo tem permissão para gravar nele, ou se existe o local aonde o será gerado.

??
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

Cara, da uma olhada nas funções da d2kwutil.pll, acredito que isso não tenha, mas da uma olhada,

se alguém aí souber posta ai
marcelo0906
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 34
Registrado em: Qua, 02 Set 2009 3:29 pm
Localização: São José - SC

posé, ainda sou iniciante.... alguma sugestão??

na verdade me pediram para antes de gravar verificar se o local existe, se existir verificar se tem permissão de gravação...

alguém tem alguma sugestao??

em pl/sql ?
sql-PLus ?
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

se não tiver as funcoes que procura.. outra maneira de fazer seria capturar a excecao lançada
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

Como o vitor disse, você pode usar a UTL_FILE, pacote de banco, dai você escreve uma rotina plsql,

e trata a exception, por exemplo nesse caso seria:

Selecionar tudo

exception
  when utl_file.access_denied then
    raise_application_error(20001, 'sem permissao');
end;
marcelo0906
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 34
Registrado em: Qua, 02 Set 2009 3:29 pm
Localização: São José - SC

como disse sou iniciante, hehehe, sou obrigado a deixar o script gerando o arquivo, pensei em testar com pl sql se a pasta existe e se tem permissao antes de chamar o script que gera os arquivos. mas não sei como fazer isso.

não sei se é possivel, podem me ajudar???
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

cara, pega a lista de todas as exceptions que são geradas pelo pacote UTL_FILE, escreva a sua rotina, porem trate todas as exceptions com mensagens claras de qual exception disparou, aí você não precisa testar isso e aquilo, mostra o que aconteceu e boa,
marcelo0906
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 34
Registrado em: Qua, 02 Set 2009 3:29 pm
Localização: São José - SC

fala galera

então, ainda quebrando a cabeça de como fazer isso aqui...

minha idéia foi a seguinte

to usando o comando TEXT_IO e criando um arquivo... se o arquivo foi criado beleza continua processando.... se não ele exibe mensagem de erro...

meu problema agora é o seguinte.. como deletar esse arquivo gerado... ele só vai servir para testar o diretório mesmo....

preciso de ajuda mesmo... hehehe
diegolenhardt
Moderador
Moderador
Mensagens: 1177
Registrado em: Qui, 15 Out 2009 10:28 am
Localização: Recife

na biblioteca d2kwutil tem funcao para remover arquivo
JOPA
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 58
Registrado em: Sex, 30 Out 2009 9:52 am
Localização: Salvador - BA
Contato:
Atenciosamente,

João Paulo A. C. do Bomfim

"Deu certo? Deixa! Funcionou? Não mexa!"

Você sabe o caminho do arquivo?
Qual o SO em que vai rodar a aplicação?

Meu teste foi realizado no Windows XP Pro, Forms 4.5._.-

Adicionei um botão e na trigger WHEN-MOUSE-CLICK adicionei o código abaixo:

Selecionar tudo

BEGIN
   HOST('del C:\teste.txt');
END;
Feito isso eu apaguei o arquivo << teste.txt >> que encontrava-se em C:
Avatar do usuário
madmax
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 293
Registrado em: Qua, 13 Dez 2006 5:02 pm
Localização: São Paulo
Contato:
________________________________
Douglas - Madmax.

Caros.

Tenho esse exemplo de manipulação de arquivos em PL/SQL.

Acho que e o esta procurando Marcelo.

Selecionar tudo

Set ServerOutput On
declare
  v_line             varchar2(32767);

  c_location         constant varchar2(80) := 'UTL_FILE_TEST';
  c_source_filename  constant varchar2(80) := 'test.txt';
  c_copy_filename    constant varchar2(80) := 'copy.txt';
  c_ren_filename     constant varchar2(80) := 'ren.txt';


  procedure Show_Attr ( p_filename in varchar2 ) is
    v_exists         boolean;
    v_file_length    number;
    v_block_size     binary_integer;
  begin
    Utl_File.Fgetattr (

      location    => c_location,
      filename    => p_filename,
      fexists     => v_exists,
      file_length => v_file_length,
      block_size  => v_block_size );
    -- Bug #2240685. v_exists is always returned TRUE
    -- But non-existent file has ZERO file_length and block_size

    if not v_exists then Raise_Application_Error ( -20000, 'Bug #2240685 is fixed' ); end if;
    Dbms_Output.Put_Line (
      p_filename             || ' : ' ||
      To_Char(v_file_length) || ' : ' ||
      To_Char(v_block_size ) );
  end Show_Attr;

  procedure Remove ( p_filename in varchar2 ) is

  begin
    Utl_File.Fremove (
      location    => c_location,
      filename    => p_filename );
  exception
    when Utl_File.Delete_Failed then
      Utl_File.Fclose_All;
      Raise_Application_Error ( -20000, 'Fremove: Delete_Failed trapped' );
    when Utl_File.Invalid_Operation then

      Utl_File.Fclose_All;
      Raise_Application_Error ( -20000, 'Fremove: Invalid_Operation trapped' );
  end Remove;

  procedure Full_Copy ( p_source in varchar2, p_dest in varchar2 ) is
  begin
    Utl_File.Fcopy (
      src_location  => c_location,
      src_filename  => p_source,
      dest_location => c_location,

      dest_filename => p_dest );
--    start_line       binary_integer in default--    end_line         binary_integer in default
  exception when Utl_File.Invalid_Operation then
    Utl_File.Fclose_All;
    Raise_Application_Error ( -20000, 'Fcopy: Invalid_Operation trapped' );
  end Full_Copy;

  procedure Rename ( p_source in varchar2, p_dest in varchar2 ) is
  begin
    Utl_File.Frename (
      src_location  => c_location,

      src_filename  => p_source,
      dest_location => c_location,
      dest_filename => p_dest,
      overwrite     => false);
  exception when Utl_File.Rename_Failed then
    Utl_File.Fclose_All;
    Raise_Application_Error ( -20000, 'Frename: Rename_Failed trapped' );
  end Rename;
begin
  Show_Attr ( c_source_filename );
  Show_Attr ( c_copy_filename );


  Full_Copy ( c_source_filename, c_copy_filename );
--Full_Copy ( 'not_there.txt', c_copy_filename ) /* Uncomment to see Utl_File.Invalid_Operation */;
  Show_Attr ( c_copy_filename );

  -- Create ren.txt before running this block to see Utl_File.Rename_Failed
  Rename ( c_copy_filename, c_ren_filename );
  Show_Attr ( c_ren_filename );

  Remove ( c_ren_filename );
  -- Create protected.txt by hand and do "chmod a-x protected.txt"
--Remove ( 'protected.txt' ) /* Uncomment to see Utl_File.Invalid_Operation */;
end;
/
Espero ter ajudado.

Abs.
Responder
  • Informação
  • Quem está online

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