我有一个用户定义的类型,有很多属性,就像这样。
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 | ...
选择语句应该是怎样的?
对象 "的整个要点是,它们是复合数据,被视为单一单元。这就是为什么你看到的是你所看到的。
如果你想看到单个组件,你将需要 SELECT
三列(或任意多列),而不是一列。而且要访问各个属性,每列一个,你必须使用 "点 "符号。
select GetMyObject(...).attribute1 as attribute1
, GetMyObject(...).attribute2 as attribute2
-- (etc.)
from dual;
很明显,我假设你的属性名中其实没有空格。