Home

Deprecated DBMS_XMLSTORE package should not be used

Description

    Oracle Database 23ai marks DBMS_XMLSTORE as deprecated. This proprietary package inserts, updates, or deletes table rows by parsing XML payloads (insertXML, updateXML, deleteXML). Oracle recommends replacing these calls with standard SQL/XQuery or SQL/XML operators (XMLTABLE, XMLQUERY, XMLSERIALIZE) for portable, optimizer-visible code.

Key Benefits

  • Future-proof: Eliminates dependencies that may be desupported in the next major release.
  • Performance: Set-based SQL/XML typically outperforms PL/SQL DOM parsing.
  • Standards Compliance: ANSI SQL/XML works in all modern Oracle editions and most other RDBMS engines.

 

Non-compliant Code Example

DECLARE
  ctx     DBMS_XMLSTORE.ctxType;       --Non compliant code
  rowsnum NUMBER;
  xmlDoc  CLOB :=
    '7788SCOTT1000';
BEGIN
  ctx     := DBMS_XMLSTORE.newContext('EMP');       --Non compliant code
  rowsnum := DBMS_XMLSTORE.insertXML(ctx, xmlDoc);       --Non compliant code
  DBMS_XMLSTORE.closeContext(ctx);       --Non compliant code
END;

Compliant Code Example

INSERT INTO emp (empno, ename, sal)
SELECT x.empno, x.ename, x.sal
FROM   XMLTABLE(
         '/ROWSET/ROW'
         PASSING XMLTYPE(
           '7788SCOTT1000')
         COLUMNS
           empno NUMBER       PATH 'EMPNO',
           ename VARCHAR2(20) PATH 'ENAME',
           sal   NUMBER       PATH 'SAL'
       ) x;    --Compliant code
Visual Expert 2025
 VEPLSQLRULE211