Oracle
 sql >> база данни >  >> RDS >> Oracle

Извличане на стойност на xml елемент в Oracle PL SQL

Трябва да промените линията

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

до

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

В XML DOM елементите нямат никаква „стойност“, за която да говорим. Възлите на елементите съдържат текстови възли като деца и именно тези възли съдържат желаните от вас стойности.

РЕДАКТИРАНЕ (в отговор на коментара на Томалак):Не съм запознат с никакви функции в DBMS_XMLDOM за получаване на комбинираната стойност на всички дъщерни текстови възли на елемент. Ако това е, от което се нуждаете, тогава може да се наложи да използвате нещо като следната функция:

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. Не може да се прочете правилно SQL таблица в python:колоните varchar се импортират като разделени със запетаи знаци/кортежи

  2. Как да проектираме модел на данни, който се занимава с настоящите служители и прогнозираните служители?

  3. Връзката с Oracle работи чрез конзолно приложение и не работи чрез уеб услуга

  4. Как да свържете база данни Oracle 11G с помощта на SQL разработчик от друг компютър в LAN връзка

  5. Как да комбинирате няколко реда в един ред, оракул