sql >> Databasteknik >  >> RDS >> Oracle

Hämta värdet för ett xml-element i Oracle PL SQL

Du måste ändra linjen

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

till

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

I XML DOM har element inget "värde" att tala om. Elementnoder innehåller textnoder som underordnade, och det är dessa noder som innehåller de värden du vill ha.

EDIT (som svar på Tomalaks kommentar):Jag är inte medveten om några funktioner i DBMS_XMLDOM för att erhålla det kombinerade värdet av alla underordnade textnoder för ett element. Om det är vad du behöver, kan du mycket väl behöva använda något i stil med följande funktion:

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. Behöver Laravels soft_delete index på MySQL?

  2. SQL i vs skärningspunkt

  3. \d misslyckades i jdbc-programmet

  4. Att ha grupp efter klausuler — elein's GeneralBits