我正在编写一个处理存储在ANYDATA中的用户定义对象的过程。对象类型和属性名称只能在运行时知道,因此我无法在声明部分中为其定义变量。在Java中,我可以使用反射来处理它,我可以知道类名和字段名。然后我可以通过反射访问字段。在PLSQL中是否有像Java那样的方法呢?目前我想到的是在过程中动态创建一个SQL字符串并执行它,但这并不是我想要的确切答案。
假设用户A定义了一个ADT类型,如
在我的过程中,我知道我需要处理这个对象的第一个属性,即fname。所以如果一开始就知道adt类型,我的代码将如下所示:
那么我该怎么做才能使它动态化呢?提前感谢你。
假设用户A定义了一个ADT类型,如
create or replace type Person_type as object (fname varchar2(10), lname varchar2(10));
,并创建了一个对象实例并将其插入到ANYDATA中。在我的过程中,我知道我需要处理这个对象的第一个属性,即fname。所以如果一开始就知道adt类型,我的代码将如下所示:
declare
adobject A.Person_type; -- HERE! I don't know the type yet, so I can't define adobject!
tempAnydata anydata;
rt number;
vbuffer varchar2(10);
...
begin
select somecolumn
into tempAnydata
from sometable
where something='something' for update;
rt := tempAnydata.GetObject(adobject);
vbuffer := adobject.fname; -- HERE! I don't know the attribute name is fname!
-- deal with vbuffer here
end;
那么我该怎么做才能使它动态化呢?提前感谢你。
tempAnydata
确实是一个A.person_type
,那么你肯定知道(否则你无法使用类型完全相同的adobject
执行GetObject(adobject)
)该类型的第一个属性是什么。或者我有所遗漏吗? - René Nyffenegger