Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Ambil nilai elemen xml di Oracle PL SQL

Anda perlu mengubah baris

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

untuk

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

Dalam XML DOM, elemen tidak memiliki 'nilai' untuk dibicarakan. Node elemen berisi node Teks sebagai anak, dan node inilah yang berisi nilai yang Anda inginkan.

EDIT (menanggapi komentar Tomalak):Saya tidak mengetahui fungsi apa pun di DBMS_XMLDOM untuk mendapatkan nilai gabungan dari semua simpul teks anak dari suatu elemen. Jika itu yang Anda butuhkan, maka Anda mungkin perlu menggunakan sesuatu seperti fungsi berikut:

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. Kesalahan prosedur tersimpan Oracle pada pilih

  2. Pesan baris menggunakan kolom dari jumlah nol yang lebih sedikit hingga tidak ada nol

  3. ORA-01460:permintaan konversi yang tidak diterapkan atau tidak masuk akal

  4. Kesalahan sintaks saat mencoba memasukkan beberapa baris dalam SQL?

  5. Cara mendapatkan jalur tabel hierarki