Pular para o conteúdo
Visualizando 7 posts - 1 até 7 (de 7 do total)
  • Autor
    Posts
  • #98878
    Sandro2s
    Participante

      Olá pessoal!!!, so novato em oracle. Estou rodando query abaixo mas est dando erro , onde estou errando ?

      declare
      type tpNome is REF CURSOR;
      cNome tpNome;
      v_sql varchar2(1000);
      v_nome varchar2(100);
      v_arq utl_file.file_type;

      Begin
      v_sql := ‘select cuf_codigo from aa1ccduf’;
      v_arq:= utl_file.fopen(‘D:transito’,’teste’,’W’);
      open cNome for v_sql;
      loop
      fetch cNome into v_nome;
      exit when cNome%notfound;
      utl_file.put_line(v_arq,v_nome);
      end loop;
      utl_file.fclose;
      end;

      Error : PLS-00306 wrong number or types of arguments in call to ‘FCLOSE’.

      #98882
      leandrolbs
      Participante

        implemente mais isto:


        v_arq:= utl_file.fopen('D:transito','teste.txt','W');

        e no utl_file.fclose use:


        utl_file.fclose(v_arq);

        #98884
        Sandro2s
        Participante

          obrigado pela ajuda leandrolbs, não esta dando mais o erro.
          Mas agora esta dano outro : ora-29283 invalid file operation em open cNome for v_sql. se puder me dar mais esta força agradeço..

          #98889
          joseniz
          Participante

            Para usar a package UTL_FILE vc precisa fazer uma das duas configurações abaixo:
            a) No init.ora por o path no parâmetro UTL_FILE_DIR
            UTL_FILE_DIR = “D:transito”

            No seu código em PL/SQL use:
            v_arq:= utl_file.fopen(‘D:transito’,’teste’,’W’);

            b) Nas versões mais recentes (a partir do Oracle 8i) você pode criar um DIRECTORY e dar as permissôes necessárias
            CREATE DIRECTORY MEUDIR AS ‘D:transito’;
            GRANT READ,WRITE ON MEUDIR TO scott;

            No seu código em PL/SQL use:
            v_arq:= utl_file.fopen(MEUDIR,’teste’,’W’);

            Em ambos os casos corrija seu código de utl_file.fclose para utl_file.fclose(v_arq);

            PS: De preferência a opção “b”, usando a opção “a” o diretório estará aberto para qualquer conta conectada ao banco de dados, ou seja, não há segurança.

            #98892
            Sandro2s
            Participante

              Olá
              Vou fazer as correções indicada e depois posto aqui se deu certo. Vou usar a opção B como indicado. obrigado Joseniz..

              #98902
              Sandro2s
              Participante

                Ola pessoal deu certo. Nos meus estudos achei uma forma mais organizada de gerar o aquivo. Obrigado pela ajuda.

                Declare
                arq_saida utl_file.file_type;
                r_lin varchar2(36);

                Cursor cur_linha is
                select to_char(cuf_codigo,’fm00000′)as cod,cuf_nome from aa1ccduf;
                Begin
                arq_saida := utl_file.fopen(‘/dbx’,’teste.txt’,’w’);
                For r_lin in cur_linha Loop
                utl_file.put_line(arq_saida,r_lin.cod||’-‘||r_lin.cuf_nome);
                End Loop;
                utl_file.fclose(arq_saida);
                dbms_output.put_line( ‘Aquivo Gerado com Sucesso’);
                Exception
                when utl_file.invalid_operation then
                dbms_output.put_line ( ‘Operação inválida no arquivo.’);
                utl_file.fclose(arq_saida);
                when utl_file.write_error then
                dbms_output.put_line (‘Erro de gravação no arquivo.’);
                utl_file.fclose(arq_saida);
                End;

                #98941
                leandrolbs
                Participante

                  parabens Sandro2s.. é necessário colocar a extensão certo?

                Visualizando 7 posts - 1 até 7 (de 7 do total)
                • Você deve fazer login para responder a este tópico.