如何在结果查询中读取UDT对象?

问题描述 投票:0回答:1

我有一个用户定义的类型,有很多属性,就像这样。

create or replace type MyObject is object
(
    attribute 1,
    attribute 2,
    attribute 3
    ...
)

我有一个返回该对象的函数。

create or replace function GetMyObject
(...params...)
return MyObject
is
...

现在,我试图从C#应用程序中调用该函数,使用的是 Oracle.ManagedDataAccess.Client. 因为 MyObject 对C#来说不是已知的类型,我尝试调用 OracleCommand.ExecuteReader() 并从结果查询中逐一读取属性值。

select GetMyObject(...) from dual;

我在Oracle中得到的是这个表。

    |    GetMyObject(...)   |
--------------------------------
 1  |  [UserName.MyObject]  |

而我希望得到的是这个:

    | attribute 1 | attribute 2 | attribute 3 | ...
------------------------------------------------------
 1  |   value 1   |   value 2   |   value 3   | ...

选择语句应该是怎样的?

c# oracle plsql user-defined-types oracle-manageddataaccess
1个回答
1
投票

对象 "的整个要点是,它们是复合数据,被视为单一单元。这就是为什么你看到的是你所看到的。

如果你想看到单个组件,你将需要 SELECT 三列(或任意多列),而不是一列。而且要访问各个属性,每列一个,你必须使用 "点 "符号。

select GetMyObject(...).attribute1 as attribute1
     , GetMyObject(...).attribute2 as attribute2
--   (etc.)
from dual;

很明显,我假设你的属性名中其实没有空格。

© www.soinside.com 2019 - 2024. All rights reserved.