Você pode gerar XML usando a função XMLQuery(), que implementa a linguagem XQuery, de consulta a XML. Ela também pode ser usada para construir dados XML, interpretando sequências de dados a partir de suas tabelas relacionais.
Exemplo usando o SCOTT schema que vem no Oracle:
Selecionar tudo
SELECT XMLQuery(
'for $i in ora:view("DEPT")/ROW
return <Department dname="{$i/DNAME}">
<Employee>
{for $j in ora:view("EMP")/ROW
where $j/DEPTNO eq $i/DEPTNO
return ($j/ENAME, $j/JOB, $j/SAL)}
</Employee>
</Department>'
RETURNING CONTENT) FROM DUAL;
Execução:
Selecionar tudo
SQL> SELECT XMLQuery(
2 'for $i in ora:view("DEPT")/ROW
3 return <Department dname="{$i/DNAME}">
4 <Employee>
5 {for $j in ora:view("EMP")/ROW
6 where $j/DEPTNO eq $i/DEPTNO
7 return ($j/ENAME, $j/JOB, $j/SAL)}
8 </Employee>
9 </Department>'
10 RETURNING CONTENT) FROM DUAL;
XMLQUERY('FOR$IINORA:VIEW("DEP
--------------------------------------------------------------------------------
<Department dname="ACCOUNTING"><Employee><ENAME>CLARK</ENAME><JOB>MANAGER</JOB><
SQL>
Esse SQL gera um CLOB que pode ser gravado num arquivo BFile e depois enviado para quem você quiser.
Para entender melhor sobre a linguagem XQuery dê uma olhada no link abaixo, onde há vários exemplos:
http://download.oracle.com/docs/cd/E118 ... xquery.htm
Se quiser uma ajuda mais específica, poste mais sobre seu problema: estrutura das tabelas, dados de exemplo e o layout do xml esperado.