Я пишу процедуру для работы с определяемым пользователем объектом, который хранится в ANYDATA. Тип объекта и имя атрибута могут быть известны только во время выполнения, поэтому я не могу определить для него переменную в разделе объявления. В Java я могу использовать отражение, чтобы справиться с этим, я могу знать имя класса и имя поля. Затем я могу получить доступ к полям через отражение. Есть ли способ сделать это в PLSQL? Что сейчас у меня в голове, так это динамическое создание строки sql в процедуре и ее выполнение. Но это не совсем то, чего я хочу.
Допустим, пользователь A определил тип ADT как create or replace type Person_type as object (fname varchar2(10), lname varchar2(10));
, создал экземпляр объекта и вставил его в ANYDATA.
В моей процедуре я каким-то образом знаю, что мне нужно иметь дело с первым атрибутом этого объекта, которым является fname. Итак, если знать тип объявления в первую очередь, мой код будет похож на:
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;
Итак, что я должен сделать, чтобы сделать его динамическим? Заранее спасибо.