views.sql
上传用户:blenddy
上传日期:2007-01-07
资源大小:6495k
文件大小:4k
源码类别:

数据库系统

开发平台:

Unix_Linux

  1. -- ************************************************************
  2. -- * Describe the backside of a patchfield slot
  3. -- ************************************************************
  4. create function pslot_backlink_view(bpchar)
  5. returns text as '
  6. <<outer>>
  7. declare
  8.     rec record;
  9.     bltype char(2);
  10.     retval text;
  11. begin
  12.     select into rec * from PSlot where slotname = $1;
  13.     if not found then
  14.         return '''';
  15.     end if;
  16.     if rec.backlink = '''' then
  17.         return ''-'';
  18.     end if;
  19.     bltype := substr(rec.backlink, 1, 2);
  20.     if bltype = ''PL'' then
  21.         declare
  22.     rec record;
  23. begin
  24.     select into rec * from PLine where slotname = outer.rec.backlink;
  25.     retval := ''Phone line '' || trim(rec.phonenumber);
  26.     if rec.comment != '''' then
  27.         retval := retval || '' ('';
  28. retval := retval || rec.comment;
  29. retval := retval || '')'';
  30.     end if;
  31.     return retval;
  32. end;
  33.     end if;
  34.     if bltype = ''WS'' then
  35.         select into rec * from WSlot where slotname = rec.backlink;
  36. retval := trim(rec.slotname) || '' in room '';
  37. retval := retval || trim(rec.roomno);
  38. retval := retval || '' -> '';
  39. return retval || wslot_slotlink_view(rec.slotname);
  40.     end if;
  41.     return rec.backlink;
  42. end;
  43. ' language 'plpgsql';
  44. -- ************************************************************
  45. -- * Describe the front of a patchfield slot
  46. -- ************************************************************
  47. create function pslot_slotlink_view(bpchar)
  48. returns text as '
  49. declare
  50.     psrec record;
  51.     sltype char(2);
  52.     retval text;
  53. begin
  54.     select into psrec * from PSlot where slotname = $1;
  55.     if not found then
  56.         return '''';
  57.     end if;
  58.     if psrec.slotlink = '''' then
  59.         return ''-'';
  60.     end if;
  61.     sltype := substr(psrec.slotlink, 1, 2);
  62.     if sltype = ''PS'' then
  63. retval := trim(psrec.slotlink) || '' -> '';
  64. return retval || pslot_backlink_view(psrec.slotlink);
  65.     end if;
  66.     if sltype = ''HS'' then
  67.         retval := comment from Hub H, HSlot HS
  68. where HS.slotname = psrec.slotlink
  69.   and H.name = HS.hubname;
  70.         retval := retval || '' slot '';
  71. retval := retval || slotno::text from HSlot
  72. where slotname = psrec.slotlink;
  73. return retval;
  74.     end if;
  75.     return psrec.slotlink;
  76. end;
  77. ' language 'plpgsql';
  78. -- ************************************************************
  79. -- * Describe the front of a wall connector slot
  80. -- ************************************************************
  81. create function wslot_slotlink_view(bpchar)
  82. returns text as '
  83. declare
  84.     rec record;
  85.     sltype char(2);
  86.     retval text;
  87. begin
  88.     select into rec * from WSlot where slotname = $1;
  89.     if not found then
  90.         return '''';
  91.     end if;
  92.     if rec.slotlink = '''' then
  93.         return ''-'';
  94.     end if;
  95.     sltype := substr(rec.slotlink, 1, 2);
  96.     if sltype = ''PH'' then
  97.         select into rec * from PHone where slotname = rec.slotlink;
  98. retval := ''Phone '' || trim(rec.slotname);
  99. if rec.comment != '''' then
  100.     retval := retval || '' ('';
  101.     retval := retval || rec.comment;
  102.     retval := retval || '')'';
  103. end if;
  104. return retval;
  105.     end if;
  106.     if sltype = ''IF'' then
  107. declare
  108.     syrow System%RowType;
  109.     ifrow IFace%ROWTYPE;
  110.         begin
  111.     select into ifrow * from IFace where slotname = rec.slotlink;
  112.     select into syrow * from System where name = ifrow.sysname;
  113.     retval := syrow.name || '' IF '';
  114.     retval := retval || ifrow.ifname;
  115.     if syrow.comment != '''' then
  116.         retval := retval || '' ('';
  117. retval := retval || syrow.comment;
  118. retval := retval || '')'';
  119.     end if;
  120.     return retval;
  121. end;
  122.     end if;
  123.     return rec.slotlink;
  124. end;
  125. ' language 'plpgsql';
  126. -- ************************************************************
  127. -- * View of a patchfield describing backside and patches
  128. -- ************************************************************
  129. create view Pfield_v1 as select PF.pfname, PF.slotname,
  130. pslot_backlink_view(PF.slotname) as backside,
  131. pslot_slotlink_view(PF.slotname) as patch
  132.     from PSlot PF;