Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

पीएल/एसक्यूएल प्रक्रिया के भीतर, एचटीएमएल टेबल में एक क्वेरी या रेफकर्सर लपेटें

डीबीए साइट पर मैं उस उत्तर के करीब पहुंच गया जिसकी मुझे तलाश थी। Tom Kyte के पास एक बेहतरीन ब्लॉग पोस्ट है एक समारोह के साथ जो वही करता है जो मैं उम्मीद कर रहा था। संक्षेप में मैंने इसे लागू किया है:

मैंने एक ऐसा फ़ंक्शन बनाया जिसने एक 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;

फिर पीएल/एसक्यूएल डेवलपर में टेस्ट विंडो में इसका परीक्षण करने के लिए

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

यह कुछ ऐसा है जिसे मैं लंबे समय से खोजने की उम्मीद कर रहा था। धन्यवाद टॉम कायटे!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. हाइबरनेट डालने और हटाने के ऑपरेशन के दौरान 'T_' उपसर्ग तालिका नाम क्यों उत्पन्न करता है?

  2. ओरेकल - वर्कर स्ट्रिंग से टाइमस्टैम्प निकालें?

  3. Oracle SQL - मौजूद नहीं है - स्ट्रिंग मानों की सूची में मौजूद नहीं है

  4. LINQpad से एक उचित विजुअल स्टूडियो प्रोजेक्ट में जा रहे हैं?

  5. वर्रे कॉलम में 2 वें तत्व को एक्सेस करना