为了减少测试时间,我想减少触发器中的进程数。应该很容易,但不能让它发挥作用。
IF
且工作正常 IF
的这个版本也可以正常工作并插入与原版相同的所有行,因此所有汽车都有一个random_id> 0 (偶数和奇数)
CREATE OR REPLACE FUNCTION tracker_gps.avl_traffic_tracker_new()
RETURNS trigger AS
$BODY$
DECLARE
int_newcar_id bigint;
BEGIN
-- GET CAR_ID
SELECT INTO int_newcar_id
car_check
FROM avl_db.car_check(NEW.car_id, int_source_id);
IF int_newcar_id > 0 THEN
INSERT INTO avl_db.avl_pool
VALUES ( ...
);
RETURN NEW;
ELSE
RETURN NULL;
END IF;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
CREATE TRIGGER avl_traffic_tracker_insert
BEFORE INSERT
ON tracker_gps.traffic_tracker_avl
FOR EACH ROW
EXECUTE PROCEDURE tracker_gps.avl_traffic_tracker_new();
然后当更改为IF (int_newcar_id % 2) > 0 THEN
或IF (int_newcar_id % 2) = 0 THEN
0行时插入并应返回奇数行或偶数行
所以我创建了一个新的函数来进行双重检查和使用,并且两者都产生了预期的正确结果,因此只发生在触发器内。
IF (2 % 2) > 0 THEN -- or 1 % 2
RETURN 300;
ELSE
RETURN 500;
END IF;