Reflexion in PLSQL?

Ich Schreibe eine Prozedur zum Umgang mit benutzerdefinierten Objekt, das gespeichert ist in ANYDATA. Der Objekt-Typ und Attribut-Namen können erst zur Laufzeit, also kann ich nicht definieren, das viarable, für die es im declare-Abschnitt. In Java kann ich mit Reflexion zu beschäftigen, kann ich wissen, den Namen der Klasse und die Felder für name. Dann kann ich den Zugriff auf die Felder durch Reflexion. Gibt es eine Möglichkeit, es zu tun in PLSQL-wie das? Was in meinem Kopf gerade jetzt ist die Schaffung einer sql-string in der Prozedur dynamisch, und führen Sie es aus. Aber es ist nicht das, was ich will, genau.

Angenommen, Benutzer A definiert ein ADT geben Sie als create or replace type Person_type as object (fname varchar2(10), lname varchar2(10)); und erstellen Sie eine Objekt-Instanz und fügen Sie ihn in ANYDATA.

In meinem Verfahren, irgendwie ich weiß, ich benötigen, um mit dem ersten Attribut dieses Objekts, die fname. Also, wenn wissen, das adt-type auf den ersten Platz, mein code wird so sein:

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;

Also was soll ich tun, damit es dynamisch? Vielen Dank im Voraus.

  • Wenn Sie wissen, dass die tempAnydata ist wirklich ein A.person_type wie Sie sicherlich tun (sonst könnten Sie nicht tun, die GetObject(adobject) mit adobject von genau dieser Art), dann sollte man auch wissen, was in dieser Art das erste Attribut ist. Oder bin ich etwas fehlt?
  • A. person_type ist nur ein Beispiel, es könnte einer benutzerdefinierten Typ an. Es könnte sein, B. anymal_type oder etwas anderes.
  • Statische starke Typisierung saugt. (grumpy old Smalltalker wandert aus und murmelte zu sich selbst 🙂
InformationsquelleAutor icespace | 2012-04-19
Schreibe einen Kommentar