Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Pobierz wartość elementu xml w Oracle PL SQL

Musisz zmienić linię

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

do

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

W XML DOM elementy nie mają żadnej „wartości”, o której można by mówić. Węzły elementów zawierają węzły tekstowe jako dzieci i to te węzły zawierają żądane wartości.

EDIT (w odpowiedzi na komentarz Tomalaka):Nie znam żadnych funkcji w DBMS_XMLDOM, aby uzyskać łączną wartość wszystkich węzłów tekstowych podrzędnych elementu. Jeśli tego potrzebujesz, możesz potrzebować użyć czegoś takiego jak następująca funkcja:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Railsy 3.0.3 — Oracle_enhanced nie działa

  2. Konwertuj ciąg znaków oddzielonych przecinkami na tablicę w PL/SQL

  3. Oracle SQL Developer:Test nie powiódł się:Karta sieciowa nie może nawiązać połączenia?

  4. ORACLE:Widok zmaterializowany nie działa podczas używania LEWEJ POŁĄCZENIA

  5. Końcowe zero