⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 plpgsql.out

📁 postgresql8.3.4源码,开源数据库
💻 OUT
📖 第 1 页 / 共 5 页
字号:
	    update PSlot set backlink = blname where slotname = myname;	end if;	return 0;    end if;    if mytype = ''WS'' then        select into rec * from WSlot where slotname = myname;	if not found then	    raise exception ''% does not exist'', myname;	end if;	if rec.backlink != blname then	    update WSlot set backlink = blname where slotname = myname;	end if;	return 0;    end if;    if mytype = ''PL'' then        select into rec * from PLine where slotname = myname;	if not found then	    raise exception ''% does not exist'', myname;	end if;	if rec.backlink != blname then	    update PLine set backlink = blname where slotname = myname;	end if;	return 0;    end if;    raise exception ''illegal backlink beginning with %'', mytype;end;' language plpgsql;-- ************************************************************-- * Support function to clear out the backlink field if-- * it still points to specific slot-- ************************************************************create function tg_backlink_unset(bpchar, bpchar)returns integer as 'declare    myname	alias for $1;    blname	alias for $2;    mytype	char(2);    rec		record;begin    mytype := substr(myname, 1, 2);    if mytype = ''PS'' then        select into rec * from PSlot where slotname = myname;	if not found then	    return 0;	end if;	if rec.backlink = blname then	    update PSlot set backlink = '''' where slotname = myname;	end if;	return 0;    end if;    if mytype = ''WS'' then        select into rec * from WSlot where slotname = myname;	if not found then	    return 0;	end if;	if rec.backlink = blname then	    update WSlot set backlink = '''' where slotname = myname;	end if;	return 0;    end if;    if mytype = ''PL'' then        select into rec * from PLine where slotname = myname;	if not found then	    return 0;	end if;	if rec.backlink = blname then	    update PLine set backlink = '''' where slotname = myname;	end if;	return 0;    end if;end' language plpgsql;-- ************************************************************-- * AFTER INSERT or UPDATE or DELETE on slot with slotlink-- *	- Ensure that the opponent correctly points back to us-- ************************************************************create function tg_slotlink_a() returns trigger as 'declare    dummy	integer;begin    if tg_op = ''INSERT'' then        if new.slotlink != '''' then	    dummy := tg_slotlink_set(new.slotlink, new.slotname);	end if;	return new;    end if;    if tg_op = ''UPDATE'' then        if new.slotlink != old.slotlink then	    if old.slotlink != '''' then	        dummy := tg_slotlink_unset(old.slotlink, old.slotname);	    end if;	    if new.slotlink != '''' then	        dummy := tg_slotlink_set(new.slotlink, new.slotname);	    end if;	else	    if new.slotname != old.slotname and new.slotlink != '''' then	        dummy := tg_slotlink_set(new.slotlink, new.slotname);	    end if;	end if;	return new;    end if;    if tg_op = ''DELETE'' then        if old.slotlink != '''' then	    dummy := tg_slotlink_unset(old.slotlink, old.slotname);	end if;	return old;    end if;end;' language plpgsql;create trigger tg_slotlink_a after insert or update or delete    on PSlot for each row execute procedure tg_slotlink_a('PS');create trigger tg_slotlink_a after insert or update or delete    on WSlot for each row execute procedure tg_slotlink_a('WS');create trigger tg_slotlink_a after insert or update or delete    on IFace for each row execute procedure tg_slotlink_a('IF');create trigger tg_slotlink_a after insert or update or delete    on HSlot for each row execute procedure tg_slotlink_a('HS');create trigger tg_slotlink_a after insert or update or delete    on PHone for each row execute procedure tg_slotlink_a('PH');-- ************************************************************-- * Support function to set the opponents slotlink field-- * if it does not already point to the requested slot-- ************************************************************create function tg_slotlink_set(bpchar, bpchar)returns integer as 'declare    myname	alias for $1;    blname	alias for $2;    mytype	char(2);    link	char(4);    rec		record;begin    mytype := substr(myname, 1, 2);    link := mytype || substr(blname, 1, 2);    if link = ''PHPH'' then        raise exception 		''slotlink between two phones does not make sense'';    end if;    if link in (''PHHS'', ''HSPH'') then        raise exception 		''link of phone to hub does not make sense'';    end if;    if link in (''PHIF'', ''IFPH'') then        raise exception 		''link of phone to hub does not make sense'';    end if;    if link in (''PSWS'', ''WSPS'') then        raise exception 		''slotlink from patchslot to wallslot not permitted'';    end if;    if mytype = ''PS'' then        select into rec * from PSlot where slotname = myname;	if not found then	    raise exception ''% does not exist'', myname;	end if;	if rec.slotlink != blname then	    update PSlot set slotlink = blname where slotname = myname;	end if;	return 0;    end if;    if mytype = ''WS'' then        select into rec * from WSlot where slotname = myname;	if not found then	    raise exception ''% does not exist'', myname;	end if;	if rec.slotlink != blname then	    update WSlot set slotlink = blname where slotname = myname;	end if;	return 0;    end if;    if mytype = ''IF'' then        select into rec * from IFace where slotname = myname;	if not found then	    raise exception ''% does not exist'', myname;	end if;	if rec.slotlink != blname then	    update IFace set slotlink = blname where slotname = myname;	end if;	return 0;    end if;    if mytype = ''HS'' then        select into rec * from HSlot where slotname = myname;	if not found then	    raise exception ''% does not exist'', myname;	end if;	if rec.slotlink != blname then	    update HSlot set slotlink = blname where slotname = myname;	end if;	return 0;    end if;    if mytype = ''PH'' then        select into rec * from PHone where slotname = myname;	if not found then	    raise exception ''% does not exist'', myname;	end if;	if rec.slotlink != blname then	    update PHone set slotlink = blname where slotname = myname;	end if;	return 0;    end if;    raise exception ''illegal slotlink beginning with %'', mytype;end;' language plpgsql;-- ************************************************************-- * Support function to clear out the slotlink field if-- * it still points to specific slot-- ************************************************************create function tg_slotlink_unset(bpchar, bpchar)returns integer as 'declare    myname	alias for $1;    blname	alias for $2;    mytype	char(2);    rec		record;begin    mytype := substr(myname, 1, 2);    if mytype = ''PS'' then        select into rec * from PSlot where slotname = myname;	if not found then	    return 0;	end if;	if rec.slotlink = blname then	    update PSlot set slotlink = '''' where slotname = myname;	end if;	return 0;    end if;    if mytype = ''WS'' then        select into rec * from WSlot where slotname = myname;	if not found then	    return 0;	end if;	if rec.slotlink = blname then	    update WSlot set slotlink = '''' where slotname = myname;	end if;	return 0;    end if;    if mytype = ''IF'' then        select into rec * from IFace where slotname = myname;	if not found then	    return 0;	end if;	if rec.slotlink = blname then	    update IFace set slotlink = '''' where slotname = myname;	end if;	return 0;    end if;    if mytype = ''HS'' then        select into rec * from HSlot where slotname = myname;	if not found then	    return 0;	end if;	if rec.slotlink = blname then	    update HSlot set slotlink = '''' where slotname = myname;	end if;	return 0;    end if;    if mytype = ''PH'' then        select into rec * from PHone where slotname = myname;	if not found then	    return 0;	end if;	if rec.slotlink = blname then	    update PHone set slotlink = '''' where slotname = myname;	end if;	return 0;    end if;end;' language plpgsql;-- ************************************************************-- * Describe the backside of a patchfield slot-- ************************************************************create function pslot_backlink_view(bpchar)returns text as '<<outer>>declare    rec		record;    bltype	char(2);    retval	text;begin    select into rec * from PSlot where slotname = $1;    if not found then        return '''';    end if;    if rec.backlink = '''' then        return ''-'';    end if;    bltype := substr(rec.backlink, 1, 2);    if bltype = ''PL'' then        declare	    rec		record;	begin	    select into rec * from PLine where slotname = outer.rec.backlink;	    retval := ''Phone line '' || trim(rec.phonenumber);	    if rec.comment != '''' then	        retval := retval || '' ('';		retval := retval || rec.comment;		retval := retval || '')'';	    end if;	    return retval;	end;    end if;    if bltype = ''WS'' then        select into rec * from WSlot where slotname = rec.backlink;	retval := trim(rec.slotname) || '' in room '';	retval := retval || trim(rec.roomno);	retval := retval || '' -> '';

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -