Odbicie w PLSQL?
Piszę procedurę radzenia sobie z obiektem zdefiniowanym przez użytkownika, który jest przechowywany w ANYDATA. Typ obiektu i nazwa atrybutu mogą być znane tylko w czasie wykonywania, więc nie mogę zdefiniować tego dla niego w sekcji deklaracji. W Javie mogę użyć refleksji, aby sobie z tym poradzić, znam nazwę klasy i pola. Wtedy mogę uzyskać dostęp do pól poprzez odbicie. Czy jest jakiś sposób na zrobienie tego w PLSQL w ten sposób? W mojej głowie dynamicznie tworzy się ciąg znaków sql w procedurze i wykonuję go. Ale to nie jest dokładnie to, czego chcę.
Załóżmy, że użytkownik A zdefiniował typ ADT jakocreate or replace type Person_type as object (fname varchar2(10), lname varchar2(10));
i utwórz instancję obiektu i wstaw ją do ANYDATA.
W mojej procedurze wiem, że muszę poradzić sobie z pierwszym atrybutem tego obiektu, którym jest fname. Jeśli więc znasz typ adt, mój kod będzie wyglądał następująco:
<code>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; </code>
Co zatem powinienem zrobić, aby zrobić to dynamicznie? Z góry dziękuję.