2017-04-05 46 views
0

我想使用Oracle的XMLELEMENT函数创建一个XML,并在测试查询时工作正常,但只要我添加了XMLELEMENT函数,它的不显示任何数据。下面是我在做什么:XMLELEMENT在Oracle的输出窗口中不显示任何数据Sql Developer

普通查询:

SELECT NAME from sysadm.USER where ID = '121'; 
**Output** - Sahil 

XML查询:

SET SERVEROUTPUT ON 
DECLARE 
nametag xmltype; 
BEGIN 
    SELECT XMLELEMENT("USERNAME", NAME) into nametag from sysadm.USER where ID = '121'; 
END; 

**Output** - anonymous block completed 

任何建议,我究竟做错了什么?

+0

您不仅添加了'xmlelement',您已经将它包装在一个匿名的PL/SQL块中 - 您是否确实有这样做的理由? –

回答

2

你需要真正显示你可以用做你的变量,值:

SET SERVEROUTPUT ON 
DECLARE 
nametag xmltype; 
BEGIN 
    SELECT XMLELEMENT("USERNAME", NAME) into nametag from sysadm.USER where ID = '121'; 
    DBMS_OUTPUT.PUT_LINE(nametag.getstringval()); 
END; 

只要至少与生成的字符串是小于32K。但是除了调试之外,应该避免使用dbms_output,因为您通常无法控制其他人调用您的代码是否启用了服务器输出。

你也可以使用绑定变量,如:

VAR result CLOB; 

DECLARE 
nametag xmltype; 
BEGIN 
    SELECT XMLELEMENT("USERNAME", NAME) into nametag from sysadm.USER where ID = '121'; 
    :result := nametag.getclobval(); 
END; 
/

print result 

你并不需要使用PL/SQL块都不过 - 你可以这样做:

SELECT XMLELEMENT("USERNAME", NAME) from sysadm.USER where ID = '121'; 

任选加入一个.getclobval().getstringval()来更改输出。根据生成的XML的长度,您可能需要set long以更高的值将其全部显示在工作表中。如果您以语句而不是脚本的形式运行,查询结果输出网格将只显示(XMLTYPE),但您可以双击它查看该值,或右键单击并选择“单个记录视图”以查看实际内容。

+0

谢谢亚历克斯的详细答案。这就是我所看到的。只是想知道为什么Oracle不像SQL Server那样行为并将结果显示在输出窗口中。非常感谢:) –

+0

因为它不是SQL Server * 8-)[12c添加了一些类似的东西](https://docs.oracle.com/database/121/LNPLS/release_changes.htm#LNPLS118)。 –

相关问题