木匠的微型博客 Charlie Twitter

    follow me on Twitter

    Tuesday, July 07, 2009

    奇怪的Strange PL/SQL complier bug编译臭虫

    今天终于完成了数据上载的智能修改, 就是说只修改数据有变化的列.

    比如我们的库存表, 有50个列, 52% 的UPDATE仅修改"价格/price"一列.

    可是遇到了一个极其古怪的臭虫, 如下所示, 一个简单的Loop循环, 漏掉了End Loop后面的分号";", 程序居然通过了编译,而且运行时也没有报错, 就是 End Loop 后面的语句被当成注释一样给跳过了. 这样的错误太难debug了, 幸好我充分的运用了code instrument技术, 几乎每一行代码都跟了一句debug (类似log4j), 很快找到了错误所在.
    ...

    run_bulk_update;

    FOR i in 1 .. lt_top_pattern.Count
    Loop
    run_bulk_update_tophit(p_hit_cols => lt_top_pattern(i));
    End Loop ;

    run_bulk_insert;
    save_col_upd_pattern;
    ...

    数据库版本是11.1.0.7.0, SunOS 5.10

    No comments: