Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PL/SQL查看从Oracle函数返回的SYS.XMLTYPE_Xml_Oracle_Plsql - Fatal编程技术网

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

使用PL/SQL查看从Oracle函数返回的SYS.XMLTYPE,xml,oracle,plsql,Xml,Oracle,Plsql,我有一个Oracle函数,可以动态创建XML文档,并以SYS.XMLTYPE值返回它 我想从SQLDeveloper运行一个查询,调用该函数并通过select或dbms_输出打印文档——我不在乎 但是所有的示例/文档似乎都涉及查询表中的XML列,我似乎无法获得适合我的特定用法的语法。我想要这样的东西: declare x SYS.XMLTYPE; begin x := my_package.my_function(); select x.getclobval() from x;

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

我想从SQLDeveloper运行一个查询,调用该函数并通过select或dbms_输出打印文档——我不在乎

但是所有的示例/文档似乎都涉及查询表中的XML列,我似乎无法获得适合我的特定用法的语法。我想要这样的东西:

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

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

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

declare
   x SYS.XMLTYPE;
begin
   x := my_package.my_function();
   dbms_output.put_line ( x.getCLOBVal() );
end;

根据XML的长度和dbms_output.put_line在Oracle版本中的限制,您可能需要将其包装为一点智能,如下所示:

PROCEDURE put_string
(
    p_text IN CLOB
)
IS
    v_index INTEGER;
BEGIN

    IF p_text IS NULL THEN
        RETURN;
    END IF;

    v_index := instr(p_text, chr(10));

    IF v_index > 0 AND v_index < 256 THEN
        dbms_output.put_line(substr(p_text, 1, v_index-1));
        put_string(substr(p_text, v_index+1));
    ELSE
        IF length(p_text) <= 255 THEN
            dbms_output.put_line(p_text);
        ELSE
            dbms_output.put_line(substr(p_text, 1, 255));
            put_string(substr(p_text, 256));
        END IF;
    END IF;

END;

下面是一个返回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>
从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>

这也适用于SQL Developer

我尝试使用x:=XMLType;您的尝试似乎起到了+1奇怪的作用,这个简单的案例可以很好地在代码中定义变量,如上面的示例所示。但当我在数据库中尝试时失败了——我只得到了错误ORA-06502:PL/SQL:numeric或value error。从下面的双重答案中进行选择似乎效果不错。