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

Từ XML bên trong CLOB, đến bảng Oracle với danh sách các đường dẫn

CẬP NHẬT Tôi đã tìm thấy tệp xml khá lớn (140 KB). Hệ thống của tôi:máy tính xách tay với bộ xử lý core i5 (2400 MHz), oracle 12c bên trong một máy ảo, thời gian để xử lý - 0,38 giây. Phương pháp này là phương pháp thay thế duy nhất mà tôi biết. Ví dụ về xml ở đây mà tôi tìm thấy tại w3schools.com.

declare
  xml_str clob := q'[<?xml version="1.0" encoding="UTF-8"?>
<CATALOG>
 <CD>
  <TITLE>Empire Burlesque</TITLE>
  <ARTIST>Bob Dylan</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <COMPANY>Columbia</COMPANY>
  <PRICE>10.90</PRICE>
  <YEAR>1985</YEAR>
 </CD>
 <CD>
  <TITLE>Hide your heart</TITLE>
  <ARTIST>Bonnie Tyler</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>CBS Records</COMPANY>
  <PRICE>9.90</PRICE>
  <YEAR>1988</YEAR>
 </CD>
</CATALOG>]';

v_doc  dbms_xmldom.domdocument;
node   dbms_xmldom.domnode;
txt    varchar2(4000);
type   t_list is table of number index by varchar2(4000);
v_list t_list;
  procedure enum_nodes(n dbms_xmldom.domnode, tag_name varchar2) is
    chn  dbms_xmldom.domnode;
    nl   dbms_xmldom.domnodelist;
  begin
    nl := dbms_xmldom.getchildnodes(n);
    for i in 0..dbms_xmldom.getlength(nl) loop
      chn := dbms_xmldom.item(nl, i);

      if dbms_xmldom.getnodetype(chn) = 1 then
         enum_nodes(chn, tag_name || dbms_xmldom.getnodeName(chn) || '/');
      elsif dbms_xmldom.getnodetype(chn) = 3 then
         v_list(tag_name || dbms_xmldom.getnodevalue(chn)) := 1;
      end if;
    end loop;
  end;
begin
  v_doc := dbms_xmldom.newdomdocument(xml_str);
  node := dbms_xmldom.makenode(v_doc);

  enum_nodes(node, '/');

  txt := v_list.first;
  while txt is not null loop
     dbms_output.put_line(txt);
     txt := v_list.next(txt);
  end loop;
end;
/



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không thể chèn Unicode bằng cx-Oracle

  2. oracle chuyển đổi DD-MON-YY thành DD / MM / YYYY

  3. Cách xem nội dung hàm lưu trữ PL / SQL trong Oracle

  4. Hủy thao tác chèn / cập nhật trong trình kích hoạt bằng PL / SQL

  5. Chèn ngày vào cơ sở dữ liệu oracle từ PHP