当sql表为空时,dbms_xmlgen.getxmltype(上下文)返回null

当sql表为空时,dbms_xmlgen.getxmltype(上下文)返回null,sql,xml,database,oracle,Sql,Xml,Database,Oracle,我使用以下函数将表数据转换为XML。但是,每当表数据为null时,生成的XML都为null。我希望它在表数据为空的情况下添加列名。 我应该对此函数进行哪些更改 function XmlToBlob(p_query varchar2) return blob is ctx dbms_xmlgen.ctxhandle; xml xmltype; resultBlob blob; begin ctx := dbms_xmlgen.newcontex

我使用以下函数将表数据转换为XML。但是,每当表数据为null时,生成的XML都为null。我希望它在表数据为空的情况下添加列名。 我应该对此函数进行哪些更改

function XmlToBlob(p_query varchar2) return blob is 
  ctx         dbms_xmlgen.ctxhandle;
  xml         xmltype;
  resultBlob  blob; 
begin
  ctx := dbms_xmlgen.newcontext(p_query);
  dbms_xmlgen.setNullHandling(ctx, dbms_xmlgen.empty_tag);
  xml := dbms_xmlgen.getxmltype(ctx);
  if (xml is not null) then
    resultBlob := xml.getBlobVal(NLS_CHARSET_ID('AL32UTF8'));
  else
    resultBlob := null;
  end if;
  return resultBlob;
end;

您应该更改查询,以便在无法检索其他数据时返回一行空值

试试这个:

对于ORACLE:

select emp.*
from   dual
left   join emp on ( 1 = 1 )
对于MSSQL服务器:

select t.*
from (select 1 as adummy) a
left join (select * from emp ) t on 1=1

您是否建议生成一个带有“空值”的xml?xml只包含列名标记。实际上,我稍后将把这个XML导出到.xls文件。它会创建0kb的文件,但不会打开。我希望这个.xls(由这个xml生成)至少包含列名,这样它就可以打开了。目前的查询只是简单的“select*from emp”看起来很棒!我一测试就把它标为答案。嘿!如何为SQL Server编写此查询以返回至少一行?不确定-SQL Server是否支持“with”语法?如果是这样,你可以简单地做你自己的双。否则,只需创建自己的单行表,并随意调用。我做到了。它在你的答案中更新了。谢谢你的帮助!