取消for循环后的一个逻辑错误
来源:互联网 发布:java官网教程 编辑:程序博客网 时间:2024/06/11 18:48
--循环导入5-10级的子地址
FOR V_GRADE IN 5..10
LOOP
IF V_GRADE<8 THEN
INSERT INTO STG_GRIDUNIT_DP_SONSTID(GUID, GU_STDID, STDID, GRADE)
SELECT GG.GUID, GG.STDADDRESSID, GG.STDADDRESSID, GG.GRADE
FROM STG_BLD_GU_GISADDR GG
WHERE GG.GRADE=V_GRADE;
COMMIT;
END IF;
INSERT INTO STG_GRIDUNIT_DP_SONSTID(GUID, GU_STDID, STDID, GRADE)
SELECT G1.GUID, G1.GU_STDID, AG.ID, V_GRADE
FROM STG_ADDR_GIS AG, STG_GRIDUNIT_DP_SONSTID G1
WHERE AG.PARENTID=G1.STDID
AND G1.GRADE=V_GRADE-1;
COMMIT;
END LOOP;
看到这段代码,想想这里用for循环就是浪费时间,完全可以去掉的嘛,于是就修改了。当然,还是得谨慎一点,修改前记录下表里的数据量。修改后如下:
INSERT INTO STG_GRIDUNIT_DP_SONSTID(GUID, GU_STDID, STDID, GRADE)
SELECT GG.GUID, GG.STDADDRESSID, GG.STDADDRESSID, GG.GRADE
FROM STG_BLD_GU_GISADDR GG
WHERE GG.GRADE IN (5,6,7);
COMMIT;
INSERT INTO STG_GRIDUNIT_DP_SONSTID(GUID, GU_STDID, STDID, GRADE)
SELECT G1.GUID, G1.GU_STDID, AG.ID, AG.GRADE
FROM STG_ADDR_GIS AG, STG_GRIDUNIT_DP_SONSTID G1
WHERE AG.PARENTID=G1.STDID
AND G1.GRADE IN (4,5,6,7,8,9);
COMMIT;
测试下这回跑完用的时间是上次的一半,想想应该成功了吧,但是检查下数据情况后才发现出现了问题:数据量比之前少了很多!
一开始根本就没反应过来,想着这改动应该完全是没问题的啊,就是前面实现的另一种表述罢了,可是实际结果却并没有按照我的意思,那还是老实的找找原因吧。
经过一番苦思冥想,终于发现问题所在了:就出在这个for循环上!前面的一段insert 改动当然是没有问题的,可是后面的就不同了。之前是从自己这个表开始,将其里面的4级地址作为父地址,然后找到下面所有的子地址插入表内,再将之前表里就有的5级地址和新插入进来的5级地址作为父地址,取其全部子地址再插入进来,依次类推,只至第9级地址。而更改后的情况却是,将本表里的4到9级地址作为父地址,取其全部子地址插入进来就完事了,新插入进来的地址没有再做为父地址来用,这就是问题的所在!
想想之所以还会犯这样一个逻辑错误,还是代码敲得太少了啊。
- 取消for循环后的一个逻辑错误
- for循环中的一个错误
- 关于for循环的一个初学者易犯得错误。
- 一个FOR循环的等腰三角形
- for循环的一个例子
- 一个for循环的效率
- 一个没有{}的for循环
- 经典错误:插入for循环后程序无法运行
- for循环一个常见的错误(c++primer 3.13题)
- 一个逻辑错误。
- java初学者,for循环的使用错误。
- 关于for循环遇到的一些错误
- TableViewCell选中一个后另外的取消选择
- js for循环 第一笔循环2次的错误
- for循环 一个简单的例子
- 一个基础的for循环面试题
- Python for 循环的一个坑
- 一个基础的for循环面试题
- 代码复用的规则
- a:link,a:visited,a:hover,a:active 分别是什么意思?
- 类的设计原则
- Ubuntu 12.04 Desktop 版本 xrdp 连接上空屏幕问题
- fedora设置屏幕亮度
- 取消for循环后的一个逻辑错误
- Android数据库(SQLiteDatabase)使用小结
- linux开机启动脚本的顺序
- Eclipse调试时Application XXX is waiting for the debugger to attach的提示
- 通用Log4J配置文件
- EditText输入校验和一些相关的属性
- Android safe mode
- 理解 Sleep()函数
- unity的prefabs