[英]Can I alias columns from a cursor in SELECT statement in Oracle?
我正在编写一个客户端应用程序,该应用程序通过select
语句从Oracle数据库中调用存储过程。 该存储过程返回一个游标。 我需要为该游标返回的列定义别名,并且需要在我的select
语句中执行此操作。
我无法对Oracle数据库进行任何更改。 我无法编写任何PLSQL。 我只能使用该数据库查询它。
请指教。
背景:此存储过程是应用程序框架中称为许多存储过程之一。 当前,所有调用都使用以下语法以XML格式返回其结果:
select XMLType.createXML(package_name.storedProcName('1', '2', '3')).getClobVal() as sresult from dual;
但是,此光标包含两个具有相同名称(特别是“ NAME”)的列。 当在TOAD中运行此查询时,该列会自动附加一个“ _1”,但是XMLType会导致逻辑上不正确的XML,如下所示:
<?xml version="1.0"?>
<ROWSET>
<ROW>
<ID>1</ID>
<NAME>BRUCE WAYNE</NAME>
<NAME>BATMAN</NAME>
</ROW>
</ROWSET>
这就是为什么我必须在将列转换为XMLType之前为它们加别名。 我希望查询输出不包含重复的列名,以便XML可以改为这样(不包含重复的标签):
<?xml version="1.0"?>
<ROWSET>
<ROW>
<ID>1</ID>
<NAME>BRUCE WAYNE</NAME>
<OTHER_NAME>BATMAN</OTHER_NAME>
</ROW>
</ROWSET>
我会为此一个样式表。
例如:
SQL> select XMLType.createXML(foo()).transform(xmltype('<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
2 <xsl:template match="/ROWSET/ROW/NAME[2]">
3 <NAME_1>
4 <xsl:apply-templates select="@*|node()"/>
5 </NAME_1>
6 </xsl:template>
7 <xsl:template match="@*|node()">
8 <xsl:copy>
9 <xsl:apply-templates select="@*|node()"/>
10 </xsl:copy>
11 </xsl:template>
12 </xsl:stylesheet>')) as sresult from dual
13 /
SRESULT
--------------------------------------------------------------------------------
<ROWSET>
<ROW>
<ID>1</ID>
<NAME>BRUCE WAYNE</NAME>
<NAME_1>BATMAN</NAME_1>
</ROW>
<ROW>
<ID>2</ID>
<NAME>CLARK KENT</NAME>
<NAME_1>SUPERMAN</NAME_1>
</ROW>
</ROWSET>
也就是说,我们用NAME_1替换了ROW元素中的第二个NAME出现( /ROWSET/ROW/NAME[2]
)。 其他所有内容都照原样复制。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.