我想在存储过程中修改一个表中的某个字段的内容。比如说test_table中的test字段。原有记录中test字段的内容可能有1,2,3。现在要把原来是1的改为2,2的改为3,3的改为4。而且修改的顺序是未知的。这样在执行的时候,如果先把1的改为2了,这样再执行2改为3时,就会把原来是1的数据也改为3。请问有什么办法能够避免呢?

解决方案 »

  1.   

    CREATE TABLE CHANGE_COUNT(N INT);
    INSERT INTO CHANGE_COUNT VALUES(1);
    INSERT INTO CHANGE_COUNT VALUES(2);
    INSERT INTO CHANGE_COUNT VALUES(3);SQL> SELECT * FROM CHANGE_COUNT;                                      N
    ---------------------------------------
                                          1
                                          2
                                          3
    SQL> UPDATE CHANGE_COUNT SET N=CASE WHEN N=1 THEN 2 WHEN N=2 THEN 3 WHEN N=3 THEN 4 ELSE N END;3 rows updatedSQL> COMMIT;SQL> SELECT * FROM CHANGE_COUNT;                                      N
    ---------------------------------------
                                          2
                                          3
                                          4
    是这个意思么?
      

  2.   

    不完全是。修改前的值和修改后的值都需要从数据库中读出来。如果用游标取,每次只能取出一对数据。这样就无法判断执行修改的先后顺序。也就是说不能写出楼上提出的update语句。
      我现在想实现的是在第二次或之后执行update时,where条件读出来的是没有执行修改前的记录。
      

  3.   

    SQL> select xm,xbbm from rk_jbxxb;XM                                       XBBM
    ---------------------------------------- ----
    a                                        1
    b                                        1
    c                                        1
    d                                        1
    e                                        2
    f                                        2
    g                                        2
    h                                        28 rows selectedSQL> update rk_jbxxb set xbbm ='2' where xbbm='1';4 rows updated
    我希望这时候执行select xm,xbbm from rk_jbxxb;看到的还是
    XM                                       XBBM
    ---------------------------------------- ----
    a                                        1
    b                                        1
    c                                        1
    d                                        1
    e                                        2
    f                                        2
    g                                        2
    h                                        2
    而不是:
    XM                                       XBBM
    ---------------------------------------- ----
    a                                        2
    b                                        2
    c                                        2
    d                                        2
    e                                        2
    f                                        2
    g                                        2
    h                                        2