无法在触发器中查找数字是奇数/偶数

时间:2016-11-29 16:34:26

标签: sql postgresql

为了减少测试时间,我想减少触发器中的进程数。应该很容易,但不能让它发挥作用。

  • 原始版本没有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 THENIF (int_newcar_id % 2) = 0 THEN 0行时插入并应返回奇数行或偶数行

  • 所以我创建了一个新的函数来进行双重检查和使用,并且两者都产生了预期的正确结果,因此只发生在触发器内。

    IF (2 % 2) > 0 THEN -- or 1 % 2
       RETURN 300;
    ELSE 
       RETURN 500;
    END IF; 
    

0 个答案:

没有答案