1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| PROCEDURE GEN_FICHIER_XML(P_REQUETE IN VARCHAR2, P_CHEMIN IN VARCHAR2, P_FICHIER IN VARCHAR2) IS
LXML_FILE UTL_FILE.FILE_TYPE;
LLOB_XML CLOB;
LBOO_CONTINUE BOOLEAN := TRUE;
LINT_BUFFER INT := 32000;
LCTX_CTX DBMS_XMLQUERY.CTXTYPE;
BEGIN
-- Creation du XML dans un LOB
LCTX_CTX := DBMS_XMLQUERY.NEWCONTEXT(P_REQUETE);
DBMS_XMLQUERY.SETDATEFORMAT(LCTX_CTX, 'dd/MM/yyyy HH:mm:ss');
DBMS_XMLQUERY.SETENCODINGTAG(LCTX_CTX, 'windows-1252');
DBMS_LOB.CREATETEMPORARY(LLOB_XML,True,10);
LLOB_XML := DBMS_XMLQUERY.GETXML(LCTX_CTX);
DBMS_XMLQUERY.CLOSECONTEXT(LCTX_CTX);
-- Creation du fichier XML de reception
LXML_FILE := UTL_FILE.FOPEN(P_CHEMIN, P_FICHIER, 'w', LINT_BUFFER+2);
-- Remplissage du fichier XML de reception par le LOB
WHILE LBOO_CONTINUE LOOP
IF LENGTH(LLOB_XML) > LINT_BUFFER THEN
UTL_FILE.PUT(LXML_FILE, SUBSTR(LLOB_XML, 1, LINT_BUFFER));
UTL_FILE.FFLUSH(LXML_FILE);
LLOB_XML := SUBSTR(LLOB_XML, LINT_BUFFER + 1);
ELSE
UTL_FILE.PUT(LXML_FILE, SUBSTR(LLOB_XML, 1, LENGTH(LLOB_XML)));
LBOO_CONTINUE := FALSE;
END IF;
END LOOP;
DBMS_LOB.FREETEMPORARY(LLOB_XML);
UTL_FILE.FCLOSE(LXML_FILE);
EXCEPTION
WHEN OTHERS THEN
LOG_ERREUR('GEN_FICHIER_XML REQUETE=' || P_REQUETE || ' - CHEMIN=' || P_CHEMIN ||
' - FICHIER=' || P_FICHIER, SQLERRM);
END GEN_FICHIER_XML; |
Partager