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

数据库系统

开发平台:

Unix_Linux

  1. QUERY: create function tg_room_au() returns opaque as '
  2. begin
  3.     if new.roomno != old.roomno then
  4.         update WSlot set roomno = new.roomno where roomno = old.roomno;
  5.     end if;
  6.     return new;
  7. end;
  8. ' language 'plpgsql';
  9. QUERY: create trigger tg_room_au after update
  10.     on Room for each row execute procedure tg_room_au();
  11. QUERY: create function tg_room_ad() returns opaque as '
  12. begin
  13.     delete from WSlot where roomno = old.roomno;
  14.     return old;
  15. end;
  16. ' language 'plpgsql';
  17. QUERY: create trigger tg_room_ad after delete
  18.     on Room for each row execute procedure tg_room_ad();
  19. QUERY: create function tg_wslot_biu() returns opaque as '
  20. begin
  21.     if count(*) = 0 from Room where roomno = new.roomno then
  22.         raise exception ''Room % does not exist'', new.roomno;
  23.     end if;
  24.     return new;
  25. end;
  26. ' language 'plpgsql';
  27. QUERY: create trigger tg_wslot_biu before insert or update
  28.     on WSlot for each row execute procedure tg_wslot_biu();
  29. QUERY: create function tg_pfield_au() returns opaque as '
  30. begin
  31.     if new.name != old.name then
  32.         update PSlot set pfname = new.name where pfname = old.name;
  33.     end if;
  34.     return new;
  35. end;
  36. ' language 'plpgsql';
  37. QUERY: create trigger tg_pfield_au after update
  38.     on PField for each row execute procedure tg_pfield_au();
  39. QUERY: create function tg_pfield_ad() returns opaque as '
  40. begin
  41.     delete from PSlot where pfname = old.name;
  42.     return old;
  43. end;
  44. ' language 'plpgsql';
  45. QUERY: create trigger tg_pfield_ad after delete
  46.     on PField for each row execute procedure tg_pfield_ad();
  47. QUERY: create function tg_pslot_biu() returns opaque as '
  48. declare
  49.     pfrec record;
  50.     rename new to ps;
  51. begin
  52.     select into pfrec * from PField where name = ps.pfname;
  53.     if not found then
  54.         raise exception ''Patchfield "%" does not exist'', ps.pfname;
  55.     end if;
  56.     return ps;
  57. end;
  58. ' language 'plpgsql';
  59. QUERY: create trigger tg_pslot_biu before insert or update
  60.     on PSlot for each row execute procedure tg_pslot_biu();
  61. QUERY: create function tg_system_au() returns opaque as '
  62. begin
  63.     if new.name != old.name then
  64.         update IFace set sysname = new.name where sysname = old.name;
  65.     end if;
  66.     return new;
  67. end;
  68. ' language 'plpgsql';
  69. QUERY: create trigger tg_system_au after update
  70.     on System for each row execute procedure tg_system_au();
  71. QUERY: create function tg_iface_biu() returns opaque as '
  72. declare
  73.     sname text;
  74.     sysrec record;
  75. begin
  76.     select into sysrec * from system where name = new.sysname;
  77.     if not found then
  78.         raise exception ''system "%" does not exist'', new.sysname;
  79.     end if;
  80.     sname := ''IF.'' || new.sysname;
  81.     sname := sname || ''.'';
  82.     sname := sname || new.ifname;
  83.     if length(sname) > 20 then
  84.         raise exception ''IFace slotname "%" too long (20 char max)'', sname;
  85.     end if;
  86.     new.slotname := sname;
  87.     return new;
  88. end;
  89. ' language 'plpgsql';
  90. QUERY: create trigger tg_iface_biu before insert or update
  91.     on IFace for each row execute procedure tg_iface_biu();
  92. QUERY: create function tg_hub_a() returns opaque as '
  93. declare
  94.     hname text;
  95.     dummy integer;
  96. begin
  97.     if tg_op = ''INSERT'' then
  98. dummy := tg_hub_adjustslots(new.name, 0, new.nslots);
  99. return new;
  100.     end if;
  101.     if tg_op = ''UPDATE'' then
  102. if new.name != old.name then
  103.     update HSlot set hubname = new.name where hubname = old.name;
  104. end if;
  105. dummy := tg_hub_adjustslots(new.name, old.nslots, new.nslots);
  106. return new;
  107.     end if;
  108.     if tg_op = ''DELETE'' then
  109. dummy := tg_hub_adjustslots(old.name, old.nslots, 0);
  110. return old;
  111.     end if;
  112. end;
  113. ' language 'plpgsql';
  114. QUERY: create trigger tg_hub_a after insert or update or delete
  115.     on Hub for each row execute procedure tg_hub_a();
  116. QUERY: create function tg_hub_adjustslots(bpchar, integer, integer)
  117. returns integer as '
  118. declare
  119.     hname alias for $1;
  120.     oldnslots alias for $2;
  121.     newnslots alias for $3;
  122. begin
  123.     if newnslots = oldnslots then
  124.         return 0;
  125.     end if;
  126.     if newnslots < oldnslots then
  127.         delete from HSlot where hubname = hname and slotno > newnslots;
  128. return 0;
  129.     end if;
  130.     for i in oldnslots + 1 .. newnslots loop
  131.         insert into HSlot (slotname, hubname, slotno, slotlink)
  132. values (''HS.dummy'', hname, i, '''');
  133.     end loop;
  134.     return 0;
  135. end;
  136. ' language 'plpgsql';
  137. QUERY: create function tg_hslot_biu() returns opaque as '
  138. declare
  139.     sname text;
  140.     xname HSlot.slotname%TYPE;
  141.     hubrec record;
  142. begin
  143.     select into hubrec * from Hub where name = new.hubname;
  144.     if not found then
  145.         raise exception ''no manual manipulation of HSlot'';
  146.     end if;
  147.     if new.slotno < 1 or new.slotno > hubrec.nslots then
  148.         raise exception ''no manual manipulation of HSlot'';
  149.     end if;
  150.     if tg_op = ''UPDATE'' then
  151. if new.hubname != old.hubname then
  152.     if count(*) > 0 from Hub where name = old.hubname then
  153. raise exception ''no manual manipulation of HSlot'';
  154.     end if;
  155. end if;
  156.     end if;
  157.     sname := ''HS.'' || trim(new.hubname);
  158.     sname := sname || ''.'';
  159.     sname := sname || new.slotno::text;
  160.     if length(sname) > 20 then
  161.         raise exception ''HSlot slotname "%" too long (20 char max)'', sname;
  162.     end if;
  163.     new.slotname := sname;
  164.     return new;
  165. end;
  166. ' language 'plpgsql';
  167. QUERY: create trigger tg_hslot_biu before insert or update
  168.     on HSlot for each row execute procedure tg_hslot_biu();
  169. QUERY: create function tg_hslot_bd() returns opaque as '
  170. declare
  171.     hubrec record;
  172. begin
  173.     select into hubrec * from Hub where name = old.hubname;
  174.     if not found then
  175.         return old;
  176.     end if;
  177.     if old.slotno > hubrec.nslots then
  178.         return old;
  179.     end if;
  180.     raise exception ''no manual manipulation of HSlot'';
  181. end;
  182. ' language 'plpgsql';
  183. QUERY: create trigger tg_hslot_bd before delete
  184.     on HSlot for each row execute procedure tg_hslot_bd();
  185. QUERY: create function tg_chkslotname() returns opaque as '
  186. begin
  187.     if substr(new.slotname, 1, 2) != tg_argv[0] then
  188.         raise exception ''slotname must begin with %'', tg_argv[0];
  189.     end if;
  190.     return new;
  191. end;
  192. ' language 'plpgsql';
  193. QUERY: create trigger tg_chkslotname before insert
  194.     on PSlot for each row execute procedure tg_chkslotname('PS');
  195. QUERY: create trigger tg_chkslotname before insert
  196.     on WSlot for each row execute procedure tg_chkslotname('WS');
  197. QUERY: create trigger tg_chkslotname before insert
  198.     on PLine for each row execute procedure tg_chkslotname('PL');
  199. QUERY: create trigger tg_chkslotname before insert
  200.     on IFace for each row execute procedure tg_chkslotname('IF');
  201. QUERY: create trigger tg_chkslotname before insert
  202.     on PHone for each row execute procedure tg_chkslotname('PH');
  203. QUERY: create function tg_chkslotlink() returns opaque as '
  204. begin
  205.     if new.slotlink isnull then
  206.         new.slotlink := '''';
  207.     end if;
  208.     return new;
  209. end;
  210. ' language 'plpgsql';
  211. QUERY: create trigger tg_chkslotlink before insert or update
  212.     on PSlot for each row execute procedure tg_chkslotlink();
  213. QUERY: create trigger tg_chkslotlink before insert or update
  214.     on WSlot for each row execute procedure tg_chkslotlink();
  215. QUERY: create trigger tg_chkslotlink before insert or update
  216.     on IFace for each row execute procedure tg_chkslotlink();
  217. QUERY: create trigger tg_chkslotlink before insert or update
  218.     on HSlot for each row execute procedure tg_chkslotlink();
  219. QUERY: create trigger tg_chkslotlink before insert or update
  220.     on PHone for each row execute procedure tg_chkslotlink();
  221. QUERY: create function tg_chkbacklink() returns opaque as '
  222. begin
  223.     if new.backlink isnull then
  224.         new.backlink := '''';
  225.     end if;
  226.     return new;
  227. end;
  228. ' language 'plpgsql';
  229. QUERY: create trigger tg_chkbacklink before insert or update
  230.     on PSlot for each row execute procedure tg_chkbacklink();
  231. QUERY: create trigger tg_chkbacklink before insert or update
  232.     on WSlot for each row execute procedure tg_chkbacklink();
  233. QUERY: create trigger tg_chkbacklink before insert or update
  234.     on PLine for each row execute procedure tg_chkbacklink();
  235. QUERY: create function tg_pslot_bu() returns opaque as '
  236. begin
  237.     if new.slotname != old.slotname then
  238.         delete from PSlot where slotname = old.slotname;
  239. insert into PSlot (
  240.     slotname,
  241.     pfname,
  242.     slotlink,
  243.     backlink
  244. ) values (
  245.     new.slotname,
  246.     new.pfname,
  247.     new.slotlink,
  248.     new.backlink
  249. );
  250.         return null;
  251.     end if;
  252.     return new;
  253. end;
  254. ' language 'plpgsql';
  255. QUERY: create trigger tg_pslot_bu before update
  256.     on PSlot for each row execute procedure tg_pslot_bu();
  257. QUERY: create function tg_wslot_bu() returns opaque as '
  258. begin
  259.     if new.slotname != old.slotname then
  260.         delete from WSlot where slotname = old.slotname;
  261. insert into WSlot (
  262.     slotname,
  263.     roomno,
  264.     slotlink,
  265.     backlink
  266. ) values (
  267.     new.slotname,
  268.     new.roomno,
  269.     new.slotlink,
  270.     new.backlink
  271. );
  272.         return null;
  273.     end if;
  274.     return new;
  275. end;
  276. ' language 'plpgsql';
  277. QUERY: create trigger tg_wslot_bu before update
  278.     on WSlot for each row execute procedure tg_Wslot_bu();
  279. QUERY: create function tg_pline_bu() returns opaque as '
  280. begin
  281.     if new.slotname != old.slotname then
  282.         delete from PLine where slotname = old.slotname;
  283. insert into PLine (
  284.     slotname,
  285.     phonenumber,
  286.     comment,
  287.     backlink
  288. ) values (
  289.     new.slotname,
  290.     new.phonenumber,
  291.     new.comment,
  292.     new.backlink
  293. );
  294.         return null;
  295.     end if;
  296.     return new;
  297. end;
  298. ' language 'plpgsql';
  299. QUERY: create trigger tg_pline_bu before update
  300.     on PLine for each row execute procedure tg_pline_bu();
  301. QUERY: create function tg_iface_bu() returns opaque as '
  302. begin
  303.     if new.slotname != old.slotname then
  304.         delete from IFace where slotname = old.slotname;
  305. insert into IFace (
  306.     slotname,
  307.     sysname,
  308.     ifname,
  309.     slotlink
  310. ) values (
  311.     new.slotname,
  312.     new.sysname,
  313.     new.ifname,
  314.     new.slotlink
  315. );
  316.         return null;
  317.     end if;
  318.     return new;
  319. end;
  320. ' language 'plpgsql';
  321. QUERY: create trigger tg_iface_bu before update
  322.     on IFace for each row execute procedure tg_iface_bu();
  323. QUERY: create function tg_hslot_bu() returns opaque as '
  324. begin
  325.     if new.slotname != old.slotname or new.hubname != old.hubname then
  326.         delete from HSlot where slotname = old.slotname;
  327. insert into HSlot (
  328.     slotname,
  329.     hubname,
  330.     slotno,
  331.     slotlink
  332. ) values (
  333.     new.slotname,
  334.     new.hubname,
  335.     new.slotno,
  336.     new.slotlink
  337. );
  338.         return null;
  339.     end if;
  340.     return new;
  341. end;
  342. ' language 'plpgsql';
  343. QUERY: create trigger tg_hslot_bu before update
  344.     on HSlot for each row execute procedure tg_hslot_bu();
  345. QUERY: create function tg_phone_bu() returns opaque as '
  346. begin
  347.     if new.slotname != old.slotname then
  348.         delete from PHone where slotname = old.slotname;
  349. insert into PHone (
  350.     slotname,
  351.     comment,
  352.     slotlink
  353. ) values (
  354.     new.slotname,
  355.     new.comment,
  356.     new.slotlink
  357. );
  358.         return null;
  359.     end if;
  360.     return new;
  361. end;
  362. ' language 'plpgsql';
  363. QUERY: create trigger tg_phone_bu before update
  364.     on PHone for each row execute procedure tg_phone_bu();
  365. QUERY: create function tg_backlink_a() returns opaque as '
  366. declare
  367.     dummy integer;
  368. begin
  369.     if tg_op = ''INSERT'' then
  370.         if new.backlink != '''' then
  371.     dummy := tg_backlink_set(new.backlink, new.slotname);
  372. end if;
  373. return new;
  374.     end if;
  375.     if tg_op = ''UPDATE'' then
  376.         if new.backlink != old.backlink then
  377.     if old.backlink != '''' then
  378.         dummy := tg_backlink_unset(old.backlink, old.slotname);
  379.     end if;
  380.     if new.backlink != '''' then
  381.         dummy := tg_backlink_set(new.backlink, new.slotname);
  382.     end if;
  383. else
  384.     if new.slotname != old.slotname and new.backlink != '''' then
  385.         dummy := tg_slotlink_set(new.backlink, new.slotname);
  386.     end if;
  387. end if;
  388. return new;
  389.     end if;
  390.     if tg_op = ''DELETE'' then
  391.         if old.backlink != '''' then
  392.     dummy := tg_backlink_unset(old.backlink, old.slotname);
  393. end if;
  394. return old;
  395.     end if;
  396. end;
  397. ' language 'plpgsql';
  398. QUERY: create trigger tg_backlink_a after insert or update or delete
  399.     on PSlot for each row execute procedure tg_backlink_a('PS');
  400. QUERY: create trigger tg_backlink_a after insert or update or delete
  401.     on WSlot for each row execute procedure tg_backlink_a('WS');
  402. QUERY: create trigger tg_backlink_a after insert or update or delete
  403.     on PLine for each row execute procedure tg_backlink_a('PL');
  404. QUERY: create function tg_backlink_set(bpchar, bpchar)
  405. returns integer as '
  406. declare
  407.     myname alias for $1;
  408.     blname alias for $2;
  409.     mytype char(2);
  410.     link char(4);
  411.     rec record;
  412. begin
  413.     mytype := substr(myname, 1, 2);
  414.     link := mytype || substr(blname, 1, 2);
  415.     if link = ''PLPL'' then
  416.         raise exception
  417. ''backlink between two phone lines does not make sense'';
  418.     end if;
  419.     if link in (''PLWS'', ''WSPL'') then
  420.         raise exception
  421. ''direct link of phone line to wall slot not permitted'';
  422.     end if;
  423.     if mytype = ''PS'' then
  424.         select into rec * from PSlot where slotname = myname;
  425. if not found then
  426.     raise exception ''% does not exists'', myname;
  427. end if;
  428. if rec.backlink != blname then
  429.     update PSlot set backlink = blname where slotname = myname;
  430. end if;
  431. return 0;
  432.     end if;
  433.     if mytype = ''WS'' then
  434.         select into rec * from WSlot where slotname = myname;
  435. if not found then
  436.     raise exception ''% does not exists'', myname;
  437. end if;
  438. if rec.backlink != blname then
  439.     update WSlot set backlink = blname where slotname = myname;
  440. end if;
  441. return 0;
  442.     end if;
  443.     if mytype = ''PL'' then
  444.         select into rec * from PLine where slotname = myname;
  445. if not found then
  446.     raise exception ''% does not exists'', myname;
  447. end if;
  448. if rec.backlink != blname then
  449.     update PLine set backlink = blname where slotname = myname;
  450. end if;
  451. return 0;
  452.     end if;
  453.     raise exception ''illegal backlink beginning with %'', mytype;
  454. end;
  455. ' language 'plpgsql';
  456. QUERY: create function tg_backlink_unset(bpchar, bpchar)
  457. returns integer as '
  458. declare
  459.     myname alias for $1;
  460.     blname alias for $2;
  461.     mytype char(2);
  462.     rec record;
  463. begin
  464.     mytype := substr(myname, 1, 2);
  465.     if mytype = ''PS'' then
  466.         select into rec * from PSlot where slotname = myname;
  467. if not found then
  468.     return 0;
  469. end if;
  470. if rec.backlink = blname then
  471.     update PSlot set backlink = '''' where slotname = myname;
  472. end if;
  473. return 0;
  474.     end if;
  475.     if mytype = ''WS'' then
  476.         select into rec * from WSlot where slotname = myname;
  477. if not found then
  478.     return 0;
  479. end if;
  480. if rec.backlink = blname then
  481.     update WSlot set backlink = '''' where slotname = myname;
  482. end if;
  483. return 0;
  484.     end if;
  485.     if mytype = ''PL'' then
  486.         select into rec * from PLine where slotname = myname;
  487. if not found then
  488.     return 0;
  489. end if;
  490. if rec.backlink = blname then
  491.     update PLine set backlink = '''' where slotname = myname;
  492. end if;
  493. return 0;
  494.     end if;
  495. end;
  496. ' language 'plpgsql';
  497. QUERY: create function tg_slotlink_a() returns opaque as '
  498. declare
  499.     dummy integer;
  500. begin
  501.     if tg_op = ''INSERT'' then
  502.         if new.slotlink != '''' then
  503.     dummy := tg_slotlink_set(new.slotlink, new.slotname);
  504. end if;
  505. return new;
  506.     end if;
  507.     if tg_op = ''UPDATE'' then
  508.         if new.slotlink != old.slotlink then
  509.     if old.slotlink != '''' then
  510.         dummy := tg_slotlink_unset(old.slotlink, old.slotname);
  511.     end if;
  512.     if new.slotlink != '''' then
  513.         dummy := tg_slotlink_set(new.slotlink, new.slotname);
  514.     end if;
  515. else
  516.     if new.slotname != old.slotname and new.slotlink != '''' then
  517.         dummy := tg_slotlink_set(new.slotlink, new.slotname);
  518.     end if;
  519. end if;
  520. return new;
  521.     end if;
  522.     if tg_op = ''DELETE'' then
  523.         if old.slotlink != '''' then
  524.     dummy := tg_slotlink_unset(old.slotlink, old.slotname);
  525. end if;
  526. return old;
  527.     end if;
  528. end;
  529. ' language 'plpgsql';
  530. QUERY: create trigger tg_slotlink_a after insert or update or delete
  531.     on PSlot for each row execute procedure tg_slotlink_a('PS');
  532. QUERY: create trigger tg_slotlink_a after insert or update or delete
  533.     on WSlot for each row execute procedure tg_slotlink_a('WS');
  534. QUERY: create trigger tg_slotlink_a after insert or update or delete
  535.     on IFace for each row execute procedure tg_slotlink_a('IF');
  536. QUERY: create trigger tg_slotlink_a after insert or update or delete
  537.     on HSlot for each row execute procedure tg_slotlink_a('HS');
  538. QUERY: create trigger tg_slotlink_a after insert or update or delete
  539.     on PHone for each row execute procedure tg_slotlink_a('PH');
  540. QUERY: create function tg_slotlink_set(bpchar, bpchar)
  541. returns integer as '
  542. declare
  543.     myname alias for $1;
  544.     blname alias for $2;
  545.     mytype char(2);
  546.     link char(4);
  547.     rec record;
  548. begin
  549.     mytype := substr(myname, 1, 2);
  550.     link := mytype || substr(blname, 1, 2);
  551.     if link = ''PHPH'' then
  552.         raise exception
  553. ''slotlink between two phones does not make sense'';
  554.     end if;
  555.     if link in (''PHHS'', ''HSPH'') then
  556.         raise exception
  557. ''link of phone to hub does not make sense'';
  558.     end if;
  559.     if link in (''PHIF'', ''IFPH'') then
  560.         raise exception
  561. ''link of phone to hub does not make sense'';
  562.     end if;
  563.     if link in (''PSWS'', ''WSPS'') then
  564.         raise exception
  565. ''slotlink from patchslot to wallslot not permitted'';
  566.     end if;
  567.     if mytype = ''PS'' then
  568.         select into rec * from PSlot where slotname = myname;
  569. if not found then
  570.     raise exception ''% does not exists'', myname;
  571. end if;
  572. if rec.slotlink != blname then
  573.     update PSlot set slotlink = blname where slotname = myname;
  574. end if;
  575. return 0;
  576.     end if;
  577.     if mytype = ''WS'' then
  578.         select into rec * from WSlot where slotname = myname;
  579. if not found then
  580.     raise exception ''% does not exists'', myname;
  581. end if;
  582. if rec.slotlink != blname then
  583.     update WSlot set slotlink = blname where slotname = myname;
  584. end if;
  585. return 0;
  586.     end if;
  587.     if mytype = ''IF'' then
  588.         select into rec * from IFace where slotname = myname;
  589. if not found then
  590.     raise exception ''% does not exists'', myname;
  591. end if;
  592. if rec.slotlink != blname then
  593.     update IFace set slotlink = blname where slotname = myname;
  594. end if;
  595. return 0;
  596.     end if;
  597.     if mytype = ''HS'' then
  598.         select into rec * from HSlot where slotname = myname;
  599. if not found then
  600.     raise exception ''% does not exists'', myname;
  601. end if;
  602. if rec.slotlink != blname then
  603.     update HSlot set slotlink = blname where slotname = myname;
  604. end if;
  605. return 0;
  606.     end if;
  607.     if mytype = ''PH'' then
  608.         select into rec * from PHone where slotname = myname;
  609. if not found then
  610.     raise exception ''% does not exists'', myname;
  611. end if;
  612. if rec.slotlink != blname then
  613.     update PHone set slotlink = blname where slotname = myname;
  614. end if;
  615. return 0;
  616.     end if;
  617.     raise exception ''illegal slotlink beginning with %'', mytype;
  618. end;
  619. ' language 'plpgsql';
  620. QUERY: create function tg_slotlink_unset(bpchar, bpchar)
  621. returns integer as '
  622. declare
  623.     myname alias for $1;
  624.     blname alias for $2;
  625.     mytype char(2);
  626.     rec record;
  627. begin
  628.     mytype := substr(myname, 1, 2);
  629.     if mytype = ''PS'' then
  630.         select into rec * from PSlot where slotname = myname;
  631. if not found then
  632.     return 0;
  633. end if;
  634. if rec.slotlink = blname then
  635.     update PSlot set slotlink = '''' where slotname = myname;
  636. end if;
  637. return 0;
  638.     end if;
  639.     if mytype = ''WS'' then
  640.         select into rec * from WSlot where slotname = myname;
  641. if not found then
  642.     return 0;
  643. end if;
  644. if rec.slotlink = blname then
  645.     update WSlot set slotlink = '''' where slotname = myname;
  646. end if;
  647. return 0;
  648.     end if;
  649.     if mytype = ''IF'' then
  650.         select into rec * from IFace where slotname = myname;
  651. if not found then
  652.     return 0;
  653. end if;
  654. if rec.slotlink = blname then
  655.     update IFace set slotlink = '''' where slotname = myname;
  656. end if;
  657. return 0;
  658.     end if;
  659.     if mytype = ''HS'' then
  660.         select into rec * from HSlot where slotname = myname;
  661. if not found then
  662.     return 0;
  663. end if;
  664. if rec.slotlink = blname then
  665.     update HSlot set slotlink = '''' where slotname = myname;
  666. end if;
  667. return 0;
  668.     end if;
  669.     if mytype = ''PH'' then
  670.         select into rec * from PHone where slotname = myname;
  671. if not found then
  672.     return 0;
  673. end if;
  674. if rec.slotlink = blname then
  675.     update PHone set slotlink = '''' where slotname = myname;
  676. end if;
  677. return 0;
  678.     end if;
  679. end;
  680. ' language 'plpgsql';