Reflexão em PLSQL?
Eu estou escrevendo um procedimento para lidar com o objeto definido pelo usuário que é armazenado em ANYDATA. O tipo de objeto e o nome do atributo só podem ser conhecidos em tempo de execução, portanto, não posso definir o viarável para ele na seção declarar. Em Java, eu posso usar a reflexão para lidar com isso, eu posso saber o nome da classe e o nome dos campos. Então eu posso acessar os campos através da reflexão. Existe alguma maneira de fazê-lo em PLSQL assim? O que na minha cabeça agora é criar uma string sql no procedimento dinamicamente e executá-lo. Mas não é exatamente o que eu quero.
Digamos que o usuário A definiu um tipo de ADT comocreate or replace type Person_type as object (fname varchar2(10), lname varchar2(10));
e crie uma instância de objeto e insira-a em ANYDATA.
No meu procedimento, de alguma forma eu sei que preciso lidar com o primeiro atributo deste objeto, que é fname. Então, se conhecer o tipo adt em primeiro lugar, meu código será como:
<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>
Então, o que devo fazer para dinamicamente? Desde já, obrigado.