我遇到的问题是我试图将“嵌套对象”返回给cSharp程序但是.net很难理解返回的gettting数据。
以下是我在Oracle中的内容:
CREATE OR REPLACE TYPE TEST.OBJ_BASE_EVENT FORCE AS OBJECT
(
prop1 number(10),
prop2 number(5),
prop3 varchar2(100)
)
CREATE OR REPLACE TYPE TEST.OBJ_EXTENDED_EVENT FORCE AS OBJECT
(
base_event TEST.OBJ_BASE_EVENT
extended_prop1 number(15),
extended_prop2 number(15)
)
CREATE OR REPLACE TYPE COM_API.TAB_EXTENDED_EVENT is table of TEST."OBJ_EXTENDED_EVENT"
这是Oracle Proc的一些代码:
PROCEDURE Get_vents(xTbl OUT SYS_REFCURSOR) AS
cursor events is
select test.OBJ_EXTENDED_EVENT(test.OBJ_BASE_EVENT(prop1,prop2,prop3),
extended_prop1, extended_prop2)
from test.test_table;
event_tab test.extended_event;
BEGIN
OPEN events;
FETCH events BULK COLLECT
INTO event_tab;
CLOSE events;
OPEN xTBL FOR
SELECT *
FROM TABLE(team_event_tab);
END;
我可以从pl / sql运行它并查看结果。我将得到ref_cursor,结果是正确的。 列确实返回:
obj_base_event.prop1
obj_base_event.prop2
obj_base_event.prop3
extended_prop1
extended_prop2
当我运行我的cSharp代码时。我收到以下错误。
“OCI-22303:找不到TEST.OBJ_BASE_EVENT”。
它似乎看到了数据,但不知道如何处理作为ref_cursor一部分的对象。是否有任何方法可以让.net在这个返回或者oracle的方法中将其展平,以便它似乎没有基础对象?
感谢。
答案 0 :(得分:0)
看起来我有一个解决方案。
使用UNDER关键字声明子对象,而不是嵌套对象。
CREATE OR REPLACE TYPE TEST.OBJ_EXTENDED_EVENT UNDER TEST.OBJ_BASE_EVENT
(
extended_prop1 number(15),
extended_prop2 number(15)
)
现在,在select语句中,您不必在自定义类型中放置自定义类型,只需使用包含所有父属性的子自定义类型。