c# - 如何将 UDT 对象读入结果查询?
问题描述
我有一个具有许多属性的用户定义类型,如下所示:
create or replace type MyObject is object
(
attribute 1,
attribute 2,
attribute 3
...
)
我有一个返回该对象的函数:
create or replace function GetMyObject
(...params...)
return MyObject
is
...
现在我尝试使用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
三列(或多列),而不是一列。要访问单个属性,每列一个,您必须使用“点”表示法。
select GetMyObject(...).attribute1 as attribute1
, GetMyObject(...).attribute2 as attribute2
-- (etc.)
from dual;
显然,我假设您实际上在属性名称中没有空格。
推荐阅读
- javascript - 如何将电子邮件抄送添加到我的 Google 脚本中
- kotlin - 在内部取消协程?
- python - 按日期拆分多个相同文件并选择日期最新的文件
- javascript - 如何更改一个问题的状态以便将其移至其他部分,例如已解决问题的部分?
- eclipse - 在 Windows 上的 Eclipse 中从 Source 构建 JUnit 5
- android - 避免 document.addEventListener 自动阻止 Meteor 上的默认值
- mysql - 为什么我的 UPDATE 查询更新所有行?
- python - 使用 pip 安装 uber-rides SDK 时遇到问题
- postgresql - 在 PostgreSQL 和 Pg-Bouncer 中查看参数化查询日志?
- qt - Qt Designer:如何修复屏幕大小差异