Enviar arquivo para diretorio

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
  

Mensagemem Seg, 15 Abr 2019 10:44 am

Olá, tenho uma duvida sobre o uso de UTL_FILE_DIR. Preciso subir um arquivo pdf para um diretorio criado. Estou usando o codigo a seguir:

Código: Selecionar todos
declare
arquivo utl_file.file_type;
v_linha varchar2(4000);

begin
--ESCREVE
arquivo := utl_file.fopen('DIR_CERT_PEP', 'TESTEDBA1.TXT', 'W');

utl_file.put_line(arquivo, 'TESTE');

utl_file.put_line(arquivo, 'TESTE1');

utl_file.put_line(arquivo, 'TESTE2');

utl_file.put_line(arquivo, 'TESTE3');

utl_file.fclose(arquivo);

--LER

arquivo := utl_file.fopen('DIR_CERT_PEP', 'TESTEDBA1.TXT', 'R');

loop

begin

utl_file.get_line(arquivo, v_linha);

dbms_output.put_line(v_linha);

exception

when no_data_found then

utl_file.fclose(arquivo);

exit;

end;

end loop;

end;


Quando clico no botão para adicionar o arquivo ele não abre nada. Utilizo o oracle forms e preciso enviar este arquivo. Onde estou errado?
fernando84

Mensagemem Seg, 15 Abr 2019 4:03 pm

UTL_FILE é utilizado pra ler e gravar arquivos dentro do servidor Oracle.
(Funciona dentro do servidor)

Se você quer abrir uma caixa de diálogo no Forms, escolher um arquivo e depois ler ou gravar, então você deve usar TEXT_IO.

viewtopic.php?t=2364&highlight=textio
viewtopic.php?f=4&t=6739

Até a versão 6i, o Forms era Cliente/Servidor.
Então a gente usava algo assim:
Código: Selecionar todos
PROCEDURE WRITE_ITEM_BLOCK (FILENAME IN VARCHAR2) IS
  MYFILE TEXT_IO.FILE_TYPE;
  CUR_REC NUMBER;
BEGIN
  GO_BLOCK('S_ITEM');
  CUR_REC := :SYSTEM.CURSOR_RECORD;
  IF :SYSTEM.BLOCK_STATUS != 'NEW' THEN
    FIRST_RECORD;
    MYFILE := TEXT_IO.FOPEN(FILENAME, 'W');
    TEXT_IO.PUTF(MYFILE,'Item_ID,Proudct_ID,Description'||CHR(10));
    LOOP
      TEXT_IO.PUTF(MYFILE, TO_CHAR(:S_ITEM.ITEM_ID)||',');
      TEXT_IO.PUTF(MYFILE, TO_CHAR(:S_ITEM.PRODUCT_ID)||',');
      TEXT_IO.PUTF(MYFILE, :S_ITEM.DESCRIPTION||',');
      TEXT_IO.PUTF(MYFILE, CHR(10));
      EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE';
      NEXT_RECORD;
    END LOOP;
    TEXT_IO.FCLOSE(MYFILE);
  END IF;
  GO_RECORD(CUR_REC);
END;


Se você está usando Forms WEB (10g, por exemplo), aí você precisa usar WEBUTIL.
Exemplo:
Código: Selecionar todos
PROCEDURE WRITE_ITEM_BLOCK (FILENAME IN VARCHAR2) IS
  MYFILE CLIENT_TEXT_IO.FILE_TYPE;
  CUR_REC NUMBER;
BEGIN
  GO_BLOCK('S_ITEM');
  CUR_REC := :SYSTEM.CURSOR_RECORD;
  IF :SYSTEM.BLOCK_STATUS != 'NEW' THEN
    FIRST_RECORD;
    MYFILE := CLIENT_TEXT_IO.FOPEN(FILENAME, 'W');
    CLIENT_TEXT_IO.PUTF(MYFILE,'Item_ID,Proudct_ID,Description'||CHR(10));
    LOOP
      CLIENT_TEXT_IO.PUTF(MYFILE, TO_CHAR(:S_ITEM.ITEM_ID)||',');
      CLIENT_TEXT_IO.PUTF(MYFILE, TO_CHAR(:S_ITEM.PRODUCT_ID)||',');
      CLIENT_TEXT_IO.PUTF(MYFILE, :S_ITEM.DESCRIPTION||',');
      CLIENT_TEXT_IO.PUTF(MYFILE, CHR(10));
      EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE';
      NEXT_RECORD;
    END LOOP;
    CLIENT_TEXT_IO.FCLOSE(MYFILE);
  END IF;
  GO_RECORD(CUR_REC);
END;


É isso que você quer fazer ?
dr_gori
Localização: Portland, OR USA

Thomas F. G

Você já respondeu a dúvida de alguém hoje?
http://glufke.net/oracle/search.php?search_id=unanswered



Voltar para PL/SQL

Quem está online

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