gpt4 book ai didi

oracle - 在 PL/SQL 过程中,将查询或引用游标包装在 HTML 表中

转载 作者:行者123 更新时间:2023-12-02 09:25:10 24 4
gpt4 key购买 nike

如果你使用 SQL*Plus 来使用,看起来真的很容易

SQL> set markup html on;

并在 SQL*Plus 窗口中获得一些可爱的结果。我们有一个预言机工作,需要通宵运行,并将结果通过电子邮件发送给许多人。我想将 sql 语句包装在 HTML 表中以包含在该消息中。最好的方法是什么?

最佳答案

来自发布于On the DBA site我已经接近我正在寻找的答案了。 Tom Kyte has a great blog post其功能完全符合我的期望。简而言之,这是我实现的:

我创建了一个将 sys_refcursor 作为变量的函数:

CREATE OR REPLACE FUNCTION fncRefCursor2HTML(rf SYS_REFCURSOR)  RETURN CLOB
IS
lRetVal CLOB;
lHTMLOutput XMLType;
lXSL CLOB;
lXMLData XMLType;

lContext DBMS_XMLGEN.CTXHANDLE;
BEGIN
-- get a handle on the ref cursor --
lContext := DBMS_XMLGEN.NEWCONTEXT(rf);
-- setNullHandling to 1 (or 2) to allow null columns to be displayed --
DBMS_XMLGEN.setNullHandling(lContext,1);
-- create XML from ref cursor --
lXMLData := DBMS_XMLGEN.GETXMLTYPE(lContext,DBMS_XMLGEN.NONE);

-- this is a generic XSL for Oracle's default XML row and rowset tags --
-- " " is a non-breaking space --
lXSL := lXSL || q'[<?xml version="1.0" encoding="ISO-8859-1"?>]';
lXSL := lXSL || q'[<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">]';
lXSL := lXSL || q'[ <xsl:output method="html"/>]';
lXSL := lXSL || q'[ <xsl:template match="/">]';
lXSL := lXSL || q'[ <html>]';
lXSL := lXSL || q'[ <body>]';
lXSL := lXSL || q'[ <table border="1">]';
lXSL := lXSL || q'[ <tr bgcolor="cyan">]';
lXSL := lXSL || q'[ <xsl:for-each select="/ROWSET/ROW[1]/*">]';
lXSL := lXSL || q'[ <th><xsl:value-of select="name()"/></th>]';
lXSL := lXSL || q'[ </xsl:for-each>]';
lXSL := lXSL || q'[ </tr>]';
lXSL := lXSL || q'[ <xsl:for-each select="/ROWSET/*">]';
lXSL := lXSL || q'[ <tr>]';
lXSL := lXSL || q'[ <xsl:for-each select="./*">]';
lXSL := lXSL || q'[ <td><xsl:value-of select="text()"/> </td>]';
lXSL := lXSL || q'[ </xsl:for-each>]';
lXSL := lXSL || q'[ </tr>]';
lXSL := lXSL || q'[ </xsl:for-each>]';
lXSL := lXSL || q'[ </table>]';
lXSL := lXSL || q'[ </body>]';
lXSL := lXSL || q'[ </html>]';
lXSL := lXSL || q'[ </xsl:template>]';
lXSL := lXSL || q'[</xsl:stylesheet>]';

-- XSL transformation to convert XML to HTML --
lHTMLOutput := lXMLData.transform(XMLType(lXSL));
-- convert XMLType to Clob --
lRetVal := lHTMLOutput.getClobVal();

RETURN lRetVal;
END;

然后在 PL/SQL Developer 的测试窗口中对其进行测试

declare 
l_cursor sys_refcursor;
begin
open l_cursor for select * from employees;
:x:= fncRefCursor2HTML(l_cursor);
close l_cursor;
end;

这是我长期以来一直希望找到的东西。谢谢汤姆·凯特!

关于oracle - 在 PL/SQL 过程中,将查询或引用游标包装在 HTML 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7742656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com