使用PL/SQL查看从Oracle函数返回的SYS.XMLTYPE

Dav*_*vid 5 xml oracle plsql

我有一个Oracle函数,它动态创建一个XML文档,并以SYS.XMLTYPE值返回它.

我想从SQL Developer运行一个调用该函数并打印文档的查询(通过select或dbms_output - 我不在乎).

但是所有的示例/文档似乎都是指在表中查询XML列,而我似乎无法获得适合我特定用法的语法.我想要这样的事情:

declare
   x SYS.XMLTYPE;
begin
   x := my_package.my_function();
   select x.getclobval() from x;  -- doesn't work!
end;
Run Code Online (Sandbox Code Playgroud)

如何在上面的代码中打印出XML类型变量'x'的值?

Mat*_*son 8

试试这个(不保证,我还没有真正使用XML的东西)

declare
   x SYS.XMLTYPE;
begin
   x := my_package.my_function();
   dbms_output.put_line ( x.getCLOBVal() );
end;
Run Code Online (Sandbox Code Playgroud)


APC*_*APC 5

这是一个返回XMLType的函数...

SQL> create or replace function get_emp_xml
  2      (p_eno in emp.empno%type)
  3      return xmltype
  4  is
  5      return_value xmltype;
  6  begin
  7      select value(emprec) as "EMP_REC"
  8      into return_value
  9      from table (xmlsequence
 10                  (cursor
 11                      ( select * from emp e
 12                        where e.empno = p_eno
 13                       )
 14                   )
 15                  ) emprec
 16      ;
 17
 18      return return_value;
 19  end;
 20  /

Function created.

SQL>
Run Code Online (Sandbox Code Playgroud)

从SELECT语句中查询它就像您希望的那样简单:

SQL> set long 5000
SQL>
SQL> select get_emp_xml(8060) from dual
  2  /

GET_EMP_XML(8060)
--------------------------------------------------------------------------
 <ROW>
  <EMPNO>8060</EMPNO>
  <ENAME>VERREYNNE</ENAME>
  <JOB>PLUMBER</JOB>
  <MGR>7839</MGR>
  <HIREDATE>08-APR-08</HIREDATE>
  <SAL>4500</SAL>
  <DEPTNO>50</DEPTNO>
 </ROW>


SQL>
Run Code Online (Sandbox Code Playgroud)

这也适用于SQL Developer.