我有2个表:mks_equipment
和mks_equipment_packs
。
mks_equipment
有:ID
,TypeName
,Brnand
mks_equipment_packs
有:packID
,RockShoes
,Helmet
。
RockShoes
和Helmet
都引用了mks_eqipment.ID
。
我想创建一个触发器,如果您尝试添加ID
,则会引发异常,将非头盔项目引用到Helmet
中的mks_equipment_packs
列。
以下是触发器代码:
IF (NEW.packid < 0 ) THEN
RAISE EXCEPTION 'It can not be a negative number!'; END IF;
IF((mks_equipment.type != 'RockShoes' ) AND (mks_equipment.ID = NEW.rockshoes)) THEN
RAISE EXCEPTION 'Wrong piece of equipment!';
END IF;
RETURN NEW;
这就是问题所在。如果我尝试INSERT INTO mks_equipment_packs VALUES (31, 33, 84)
,
然后它说:
Error: ERROR: missing FROM-clause entry for table "mks_equipment"
LINE 1: SELECT (mks_equipment.type != 'RockShoes') AND (mks_equipmen...
^
QUERY: SELECT (mks_equipment.type != 'RockShoes') AND (mks_equipment.ID = NEW.rockshoes)
CONTEXT: PL/pgSQL function mks_equipment_checks() line 5 at IF
如何解决此问题?感谢。
P.S。 tsak特别说:我不能在几个表中拆分我的mks_equipment表。这是禁止的。
答案 0 :(得分:2)
mks_equipment.type
是表的一列,在该上下文中没有任何意义。您必须指定表中的许多行中的哪一行。
你可能正在寻找像
这样的结构IF EXISTS (SELECT 1
FROM mks_equipment
WHERE type <> 'Rock Shoes'
AND id = NEW.rockshoes)
THEN ...