在成功update一条数据后立即判断SQL%ROWCOUNT的值,为什么会等于0?

oracle版本:12.2.0.1.0

在环境中执行以下语句,表中只有一条内容为‘test’的数据,最后数据库中的结果为testplus--。

    ----------------hany test start  削除可

        update testhany set varchartype = 'testplus-'

        where varchartype = 'test';

          IF SQL%ROWCOUNT = 0 THEN

              update testhany set varchartype = 'testplus--'

            where varchartype = 'testplus-';

          END IF;

   ------------------hany test end  

在我的理解中,如果第一条更新语句成功执行的话,SQL%ROWCOUNT应该为1才对,无论如何都不可能进入第二条更新语句。

但是实际的结果是数据变成了'testplus--'。

如果有大神看出哪里可能出了问题,望不吝赐教。

 

在我的记忆中,sql是有缓存机制的,要不你试试加个commit同步一下数据?

太久没碰sql了,发表一点拙见,仅供参考。

 

        update testhany set varchartype = 'testplus-'

        where varchartype = 'test';

        commit;

          IF SQL%ROWCOUNT = 0 THEN

              update testhany set varchartype = 'testplus--'

            where varchartype = 'testplus-';

          END IF;

试一下

      

从逻辑上来说,SQL%ROWCOUNT取到的值是最后一次commit之后,最后一次更新/插入/删除时操作数据的条数。

从我的原问题来说,不加commit的时候取到0是不合理的,加了commit反而就是应该取到0才对(commit之后重置)。

当然我也实际去试了,加了commit之后执行的结果和之前一样。SQL%ROWCOUNT的值为0,表中数据更新为‘testplus--’。

我想大概不是commit的问题。

 

 

执行前varchartype  的值归为test了吗

我又确认了一遍,执行前varchartyppe的值是test。