最后输出结果为(status1=N的记录不变)
empno  pay_mon  busno  seatno  status1  status2
1        200      8      1        Y       OLD
2        200      8      2        Y       OLD
3        160      8      3        Y       OLD
4        160      8      4        Y       OLD
5        100      8      5        Y       OLD
6        100      8      6        N       OLD
7        100      8      7        Y       NEW
8        60       8      8        Y       NEW 

解决方案 »

  1.   

    不知道你在说什么?你上面给的表的数据也太特殊了吧》?全是按顺序下来的,你到底要按照谁来排序?是不是status1=N 或 status2=NEW的数据 保持它自己原来在表中的行数?下面的行依次向前提升?你最好给出在排序前的原始数据,和再你期望后的输出形式,不要太多,4行左右表达出你的意思就可以,多了看了眼花!
      

  2.   

    初始表
    empno(工号)pay_mon(金额)busno(车号) seatno(座号)  status1  status2
    1                200         8            1               Y          OLD
    2                200       8            2               Y          OLD
    3                200         8            3               Y          OLD
    4                160         8            4               Y          OLD
    5                160         8            5               Y          OLD
    6                100         8            6               N          OLD
    7                100         8            7               Y          OLD
    8                100         8            8               Y          NEW
    9                60          8            9               Y          NEW
    把empno=3 删除后,得到的表empno  pay_mon  busno  seatno  status1  status2
    1        200      8      1        Y       OLD
    2        200      8      2        Y       OLD
    4        160      8      3        Y       OLD
    5        160      8      4        Y       OLD
    7        100      8      5        Y       OLD
    6        100      8      6        N       OLD
    8        100      8      7        Y       NEW
    9       60       8      8        Y       NEW
      

  3.   

    呵呵
    我先说说
    1 可以读取所有数据到DS中 然后将所有要处理的数据(empno=3)的seatno号都-1 更新DS至数据库
    2 直接拼sql 如果数据量不大 复杂嵌套的sql语句执行效率也不会很低
      

  4.   

    噢 写错了 8好意思哈
    empno>3 
    呵呵
      

  5.   

    你忘了status1=N的记录,它的seatno不变
      

  6.   

    在你后来给的输出结果中也没有体现啊 我看你说status2 为new 的也要不变 可是好像你给的输出结果也变了
      

  7.   

    一开始写错了,只有status1=N的seatno不变
      

  8.   

    这个应该用Procedure写!
    ----For Oracle!
    Create or Replace Procedure ListSequence(V_EMPNO IN NUMBER) as
    V_SQL  VARCHAR2(200);
    V_COUNT NUMBER:=1;
    V_DELETE_SEATNO NUMBER:=0;
    TYPE REFCUR IS REF CURSOR;
       C_T1 REFCUR;
    CURSOR C1 IS
        SELECT * FROM TABLE_NAME;
    C1_DATA C1%ROWTYPE;BEGIN
    V_SQL:='SELECT SEATNO FROM TABLE_NAME WHERE EMPNO='||V_EMPNO;
    EXECUTE IMMEDIATE V_SQL INTO V_DELETE_SEATNO;EXECUTE IMMEDIATE 'DELETE FROM TABLE_NAME WHERE EMPNO='||V_EMPNO;
    COMMIT;OPEN C1;
    LOOP
       FETCH C1 INTO C1_DATA;
       EXIT WHEN C1%NOTFOUND;
       IF C1_DATA.SEATNO > V_DELETE_SEATNO THEN
          IF C1_DATA.STATUS1='N' THEN
             V_COUNT:=V_COUNT+1;
          ELSE
             V_SQL:='UPDATE TABLE_NAME SET SEATNO=SEATNO-'||V_COUNT||' WHERE SEATNO='||C1_DATA.SEATNO;
              EXECUTE IMMEDIATE V_SQL;
              COMMIT;
          END IF;
       END IF;
    END;
      

  9.   

    当然最好把上面的procedure改成trigger,那样,再你删除资料后,会自动帮你更新相关值,你用select * from table_name order by seatno  就可以了!记得要建立index,要不资料量大并且数据读写频繁的时候,这个方法有点慢。
      

  10.   

    刚才的Procedure有问题,现已做如下改动!
    ----For Oracle!
    Create or Replace Procedure ListSequence(V_EMPNO IN NUMBER) as
    V_SQL  VARCHAR2(200);
    V_DELETE_SEATNO NUMBER:=0;
    V_TEMP_INDEX NUMBER:=0;
    TYPE REFCUR IS REF CURSOR;
       C_T1 REFCUR;
    CURSOR C1 IS
        SELECT * FROM TABLE_NAME;
    C1_DATA C1%ROWTYPE;BEGIN
    V_SQL:='SELECT SEATNO FROM TABLE_NAME WHERE EMPNO='||V_EMPNO;
    EXECUTE IMMEDIATE V_SQL INTO V_DELETE_SEATNO;EXECUTE IMMEDIATE 'DELETE FROM TABLE_NAME WHERE EMPNO='||V_EMPNO;
    COMMIT;OPEN C1;
    LOOP
       FETCH C1 INTO C1_DATA;
       EXIT WHEN C1%NOTFOUND;
       IF C1_DATA.SEATNO > V_DELETE_SEATNO THEN
          IF C1_DATA.STATUS1<>'N' THEN
             V_TEMP_INDEX:=C1_DATA.SEATNO;
             V_SQL:='UPDATE TABLE_NAME SET SEATNO='||V_DELETE_SEATNO||' WHERE SEATNO='||C1_DATA.SEATNO;
              EXECUTE IMMEDIATE V_SQL;
              COMMIT;
              V_DELETE_SEATNO:=V_TEMP_INDEX;
          END IF;
       END IF;
    END;
      

  11.   

    少了一个End Loop;哈哈,请加在倒数第二行处!