sql >> Database >  >> RDS >> Oracle

Waarde ophalen van een xml-element in Oracle PL SQL

U moet de regel wijzigen

testr := DBMS_XMLDOM.getNodeName(n) || ' ' || DBMS_XMLDOM.getNodeValue(n);

naar

testr := DBMS_XMLDOM.getNodeName(n) || ' ' || DBMS_XMLDOM.getNodeValue(DBMS_XMLDOM.getFirstChild(n));

In XML DOM hebben elementen geen 'waarde' om van te spreken. Elementknooppunten bevatten tekstknooppunten als onderliggende knooppunten, en het zijn deze knooppunten die de gewenste waarden bevatten.

EDIT (in reactie op de opmerking van Tomalak):Ik ben niet op de hoogte van functies in DBMS_XMLDOM om de gecombineerde waarde van alle onderliggende tekstknooppunten van een element te verkrijgen. Als dat is wat je nodig hebt, dan moet je misschien iets als de volgende functie gebruiken:

CREATE OR REPLACE FUNCTION f_get_text_content (
    p_node          DBMS_XMLDOM.DOMNode
) RETURN VARCHAR2
AS
  l_children        DBMS_XMLDOM.DOMNodeList;
  l_child           DBMS_XMLDOM.DOMNode;
  l_text_content    VARCHAR2(32767);
  l_length          INTEGER;
BEGIN
  l_children := DBMS_XMLDOM.GetChildNodes(p_node);
  l_length := DBMS_XMLDOM.GetLength(l_children);
  FOR i IN 0 .. l_length - 1 LOOP
    l_child := DBMS_XMLDOM.Item(l_children, i);
    IF DBMS_XMLDOM.GetNodeType(l_child) IN (DBMS_XMLDOM.TEXT_NODE, DBMS_XMLDOM.CDATA_SECTION_NODE) THEN
      l_text_content := l_text_content || DBMS_XMLDOM.GetNodeValue(l_child);
    END IF;
  END LOOP;
  RETURN l_text_content;
END f_get_text_content;
/


  1. Een overzicht van PostgreSQL 13 libpq sslpassword-verbindingsparameters

  2. Hoe kan ik waarden van de ene tabel naar de andere krijgen via vergelijkbare waarden?

  3. Is het verlengen van lessen een goede gewoonte?

  4. Een datum opslaan waarvan alleen het jaar bekend mag zijn