我想创建一个PL / SQL函数,它将从给定的SQL查询返回格式化的HTML表格内容。 SQL输入查询可以具有不同数量的列。因此,如果我发送像SELECT x,y,z FROM mytable
这样的查询,我的函数应该返回一个包含三列(和多行)的表。
为了构建格式化的表,我必须遍历不同数量的列并用单元格(TD)填充HTML行(TR)。如何在给定的SQL查询中查找动态列数!?
答案 0 :(得分:0)
在SQL * Plus中使用:
set markup HTML ON entmap off
我相信标准的Oracle PL / SQL包提供HTML格式
答案 1 :(得分:0)
PLSQL方法。使用dbms_xmlgen和xlt转换。
DECLARE
v_ctx dbms_xmlgen.ctxHandle;
v_query varchar2(2000) := 'SELECT * FROM user_objects WHERE rownum < 10'; -- your query here
v_xsl_transform xmltype := xmltype('<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/ROWSET">
<table border="1">
<tr>
<xsl:for-each select="ROW[1]/*">
<td><xsl:value-of select="name()"/></td>
</xsl:for-each>
</tr>
<xsl:apply-templates/>
</table>
</xsl:template>
<xsl:template match="ROW">
<tr><xsl:apply-templates/></tr>
</xsl:template>
<xsl:template match="ROW/*">
<td><xsl:value-of select="."/></td>
</xsl:template>
</xsl:stylesheet>');
v_html clob;
BEGIN
v_ctx := dbms_xmlgen.newContext(v_query);
dbms_xmlgen.setNullHandling(v_ctx, dbms_xmlgen.EMPTY_TAG);
dbms_xmlgen.setXSLT(v_ctx, v_xsl_transform);
select xmlserialize(document dbms_xmlgen.getXMLType(v_ctx) as clob indent size =4) into v_html from dual;
dbms_xmlgen.closeContext(v_ctx);
dbms_output.put_line(v_html);
END;
/