Sql 我可以在Oracle的SELECT语句中为游标中的列设置别名吗?
我正在编写一个客户端应用程序,它通过select语句从Oracle数据库调用存储过程。存储过程返回一个游标。我需要为该游标返回的列定义别名,并且需要在select语句中定义别名 我无法对Oracle数据库进行任何更改。我不能写任何PLSQL。我唯一能用这个数据库做的就是查询它 请告知 背景:此存储过程是应用程序框架内调用的众多存储过程之一。目前,所有调用都以XML格式返回结果,并使用以下语法进行转换:Sql 我可以在Oracle的SELECT语句中为游标中的列设置别名吗?,sql,oracle,select,cursor,alias,Sql,Oracle,Select,Cursor,Alias,我正在编写一个客户端应用程序,它通过select语句从Oracle数据库调用存储过程。存储过程返回一个游标。我需要为该游标返回的列定义别名,并且需要在select语句中定义别名 我无法对Oracle数据库进行任何更改。我不能写任何PLSQL。我唯一能用这个数据库做的就是查询它 请告知 背景:此存储过程是应用程序框架内调用的众多存储过程之一。目前,所有调用都以XML格式返回结果,并使用以下语法进行转换: select XMLType.createXML(package_name.storedPro
select XMLType.createXML(package_name.storedProcName('1', '2', '3')).getClobVal() as sresult from dual;
但是,此游标包含两个同名的列。在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>
我会为这个设计一个样式表 例如:
i、 e.我们用NAME_1替换ROW元素中的第二个名称occurrence/ROWSET/ROW/NAME[2]。其他所有内容都按原样复制。请发布当前代码的演示版本。我发现很难想象您要做什么。我在问题的背景下发布了select语句,以及XML直接来自查询的结果。我不确定我还能提供什么。。。是否要查看存储过程的代码?谢谢!工作起来很有魅力!
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>