有俩表 
用户表 userinfo 有个积分等级字段 level 值1代表会员2高级会员3VIP.... 还有积分值字段score
积分等级表 scorelist 字段 score_start,score_end,caption 就是 0-50是会员 50-100是高级会员现在要求用户表的积分值发生改变的话 level能根据积分等级表进行相应的调整

解决方案 »

  1.   

    表scorelist数据结构有问题,该表应当包括level列,然后该表的score_start和score_end只能保留1个字段。不然出现1-4和2-5两个记录时,积分为3的会员无法确定等级。
      

  2.   

    试试这个CREATE TRIGGER T_USERINFO_LEAVEL
      BEFORE UPDATE OR INSERT ON USERINFO
      FOR EACH ROW
    DECLARE
      V_CAPTION SCORELIST.CAPTION%ROWTYPE;
    BEGIN
      SELECT CAPTION
        INTO V_CAPTION
        FROM SCORELIST
       WHERE SCORE_START >= :NEW.SCORE
         AND SCORE_END < :NEW.SCORE;
      IF V_CAPTION = '会员' THEN
        :NEW.LEAVEL = 1;
      END IF;
      IF V_CAPTION = '高级会员' THEN
        :NEW.LEAVEL = 2;
      END IF;
      IF V_CAPTION = 'VIP' THEN
        :NEW.LEAVEL = 3;
      END IF;
    EXCEPTION
      WHEN OTHERS THEN
        RETURN;
      
    END;
      

  3.   

    如果去掉了score_start 比较范围怎么比呢
      

  4.   


      
    -- 取出所在分数范围的最小值即可
    SELECT CAPTION
        INTO V_CAPTION
        FROM SCORELIST
       WHERE SCORE_END IN (SELECT MIN(SCORE_END) FROM SCORELIST WHERE SCORE_END > :NEW.SCORE);
      

  5.   


    MIN(SCORE_END) 还是原来的值呀现在数据表scorelist成 user_type_list
    请问怎么写啊
      

  6.   

    比较应该是
    0<当前积分<=50 体验会员
    50<当前积分<=100 普通会员 怎么取上一个integral_end的值呢
      

  7.   


    假设会员的积分为85,那么可以使用
    SELECT MIN(SCORE_END) FROM SCORELIST WHERE SCORE_END > 85 ;
    取得该值所属范围的上限值。
    可以使用
    SELECT MAX(SCORE_END) FROM SCORELIST WHERE SCORE_END < 85
    取得该值所属范围的下限值。