Virtabs Beispiel 8: Hierarchie

 

////////////////////////////////////////////////////////////////////
// Beispiel 8:
// für Fortgeschrittene: QUERIES und FOREIGNKEY in rekursiver
// Verweisstruktur.
// Dargestellt werden sollen Paare aus Manager/Employee.
// Manager ist wieder ein EMPLOYEE.
// in der Virtab kommt also EMPLOYEE zweimal vor:
// einmal als employee, und einmal als der manager des employees.
// Es sind also Queries noetig.
// Query A: EMPLOYEE als MANAGER und alle seine Details
// Query B: EMPLOYEE als EMPLOYEE und alle seine Masters/Details
// Query S ("sum") verbindet beide Queries:

VIRTUALTABLE HIERARCHY
   // EMPLOYEE 2x deklarieren, Verknuepfungsstruktur
   // festlegen
  TABLE EMPLOYEE
   QUERY A,S
   ALIAS manags // EMPLOYEE einmal als MANAGS ansprechen
   FOREIGNKEY emps.MANAGER_ID // Link vom Untergebenent
   NOCHANGE // nur employees den managers zuordnen.
   // sollten auch noch die manager eingefuegt werden, muesste
   // wieder deren manager eingegeben werden (manag.manag_id!), etc.
  TABLE EMPLOYEE
   QUERY B,S
   ALIAS emps// EMPLOYEE einmal als EMPS ansprechen
   NOFOREIGNKEYS // EMPS soll das Detail sein, d.h.
                 // es gibt keine Foreignkey-Verweise auf EMPS
     // Employees sollen eingefuegt werden:
     // also muessen auch alle tabellen, auf die EMP Foreignkeys hat,
     // in der Virtab vorkommen (da beim Insert die Foreignkeys aus
     // emp auf gueltige jobs, bzw. departments zeigen muessen).
  TABLE JOB QUERY A ALIAS MANAG_JOB NOCHANGE
   // Foreignkey nicht noetig, da in Query A nur manag auf
   // Job zeigen kann
  TABLE JOB QUERY B ALIAS EMP_JOB NOCHANGE
   // Foreignkey nicht noetig, da in Query B nur emp auf Job
   // zeigen kann
  TABLE DEPARTMENT QUERY B ALIAS EMP_DEPT NOCHANGE
   // Foreignkey nicht noetig, da in Query B nur emp auf DEPARTMENT
   // zeigen kann
  TABLE LOCATION QUERY B ALIAS EMP_LOC NOCHANGE
   // Column-Definitionen benutzen den ALIAS aus der
   // TABLE-Definition
  COLUMN boss        = manags.last_name
  COLUMN boss_job    = manag_job.function
  COLUMN slave       = emps.last_name
  COLUMN slave_job   = emp_job.function
  COLUMN slave_loc   = emp_loc.regional_group
   // slave_location dient dazu, das department zu identifizieren!
   // sonst Fehler "ORA-20003: Virtab HIERARCHY, Table EMP_DEPT:
   // Auswahl ist mehrdeutig"
  COLUMN slave_dept  = emp_dept.name
;
 

 

[Guided tour] [Bsp 1: Einfach] [Bsp 2: NOCHANGE] [Bsp 3: DEFAULT] [Bsp 4: INVISIBLE DEFAULT] [Bsp 5: CONSTRAINT] [Bsp 6: CONSTRAINT DEFLT] [Bsp 7: QUERY] [Bsp 8: Hierarchie] [Bsp 9: MODIFIES, CALCULATES]