2014-02-17 2 views
1

XML을 생성하여 파일에 기록해야합니다. utl_file.put_line을 사용했습니다. 파일을 작성하지만 아무것도 작성되지 않습니다. 또한 오류가 표시되지 않습니다. 이미 디렉토리에 쓸 수있는 권한이 있는지 확인했습니다. 코드 : 성능상의 이유로utl_file.put_line이 작동하지 않습니다.

SET serveroutput ON; 
DECLARE 
    ctx DBMS_XMLGEN.CTXHANDLE; 
    resposta CLOB; 
    xml_file utl_file.file_type; 
BEGIN 
    xml_file:=utl_file.fopen ('DATA_PUMP_DIR', 'xml.txt', 'W'); 
    ctx := dbms_xmlgen.newContext ('select * from tb_museu M where M.cnpj=111111 OR M.cnpj=222222'); 
    dbms_xmlgen.setRowsetTag (ctx, 'TODOS_OS_MUSEUS'); 
    dbms_xmlgen.setRowTag (ctx, 'MUSEU'); 
    resposta :=dbms_xmlgen.getXML (ctx); 
    utl_file.put_line (xml_file,'teste'); 
    --utl_file.put_line (xml_file,resposta); 
    dbms_xmlgen.closeContext(ctx); 
END; 
/
+0

방금 ​​dbms_xslprocessor.clob2file을 사용하여 내 xml을 내 파일로 보낼 수 있음을 알았습니다. 하지만 utl_file.put_line이 작동하지 않는 이유는 아직도 알고 싶습니다. –

+1

아마도 utl_file.fclose로 파일을 닫지 않았기 때문일 것입니다. utl_file은 버퍼에 데이터를 보관하고 정기적으로 디스크에 플러시하거나 fclose하면 플러시합니다. –

+0

@JeffreyKemp 예, 해결되었습니다. 답변을 드리 자면 투표 할 수 있습니다. –

답변

1

UTL_FILE 주기적으로 디스크에있는 실제 파일에 플러시 된 버퍼를 사용합니다. 일반적으로 파일을 닫을 때 UTL_FILE.fclose(xmlfile);과 함께 파일을 닫을 필요가 없다는 점을 제외하면 플러시에 대해 걱정할 필요가 없습니다.