sql >> Databáze >  >> RDS >> Oracle

Načte hodnotu prvku xml v Oracle PL SQL

Musíte změnit řádek

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

do

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

V XML DOM prvky nemají žádnou „hodnotu“, o které bychom mohli mluvit. Uzly prvků obsahují jako podřízené uzly Text a jsou to tyto uzly, které obsahují požadované hodnoty.

EDIT (v reakci na Tomalakovu poznámku):Nejsem si vědom žádných funkcí v DBMS_XMLDOM pro získání kombinované hodnoty všech podřízených textových uzlů prvku. Pokud je to to, co potřebujete, pak možná budete muset použít něco jako následující funkci:

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. Uložení proměnné $date do databáze mysql pomocí php

  2. Oracle - extrahovat časové razítko z řetězce varchar?

  3. Průběžná migrace dat z mysql do Hbase

  4. Aktuální datum v klauzuli WHERE MySQL