- Este tópico contém 6 respostas, 3 vozes e foi atualizado pela última vez 14 anos, 10 meses atrás por
leandrolbs.
-
AutorPosts
-
15 de abril de 2011 às 7:13 pm #98878
Sandro2s
ParticipanteOlá 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’.
15 de abril de 2011 às 8:51 pm #98882leandrolbs
Participanteimplemente mais isto:
v_arq:= utl_file.fopen('D:transito','teste.txt','W');
e no utl_file.fclose use:
utl_file.fclose(v_arq);
15 de abril de 2011 às 10:28 pm #98884Sandro2s
Participanteobrigado 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..16 de abril de 2011 às 5:42 am #98889joseniz
ParticipantePara 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.
17 de abril de 2011 às 3:36 am #98892Sandro2s
ParticipanteOlá
Vou fazer as correções indicada e depois posto aqui se deu certo. Vou usar a opção B como indicado. obrigado Joseniz..19 de abril de 2011 às 6:04 pm #98902Sandro2s
ParticipanteOla 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;23 de abril de 2011 às 9:40 pm #98941leandrolbs
Participanteparabens Sandro2s.. é necessário colocar a extensão certo?
-
AutorPosts
- Você deve fazer login para responder a este tópico.