Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Truy xuất giá trị của một phần tử xml trong Oracle PL SQL

Bạn cần thay đổi dòng

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

đến

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

Trong XML DOM, các phần tử không có bất kỳ 'giá trị' nào để nói đến. Các nút phần tử chứa các nút Văn bản dưới dạng con và chính các nút này chứa các giá trị bạn muốn.

CHỈNH SỬA (theo nhận xét của Tomalak):Tôi không biết bất kỳ chức năng nào trong DBMS_XMLDOM để lấy giá trị kết hợp của tất cả các nút văn bản con của một phần tử. Nếu đó là những gì bạn cần, thì bạn có thể cần sử dụng một cái gì đó như hàm sau:

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. ora-06553 làm ơn-306 sai số hoặc các loại đối số trong lệnh gọi tới 'ogc_x'

  2. LINQ Sử dụng like thay vì ((NVL (INSTR (x, y), 0)) =1)

  3. Truy vấn ORACLE với ORDER BY và UNION

  4. Thời lượng của dữ liệu trong bảng Tạm thời chung?

  5. Nhà phát triển SQL:Không thể thu thập thống kê hệ thống:không đủ đặc quyền