特简单的DO WHILE 循环,请高手帮我看一下!在线等,解决立即送分!
我想往一个mm表里面用游标导入数据,数据源表的取名规则是ttxxxxxx(yymmdd),yymmdd由
em_indate1,em_indate2里面取,例如输入2004-01-01至2004-01-04时,则要导tt040101,tt040102,tt040103,tt040104 四个表的数据,但此循环老是实现不了,请高手们指点一下,谢谢!以下是 代码:
date ls_indate1,ls_indate2,ls_enddate
string ls_newsql,tablename
integer b
long a
ls_indate1 = date(em_indate1.text)
ls_indate2 = date(em_indate2.text)
a = daysafter(ls_indate1,ls_indate2) //返回两个日期段的天数
b = 1 //初始值为1
ls_enddate = relativedate(ls_indate1,b) //循环结束日期
tablename = "tt" + right(string(ls_enddate, "yyyymmdd"),6) //循环结束时的表名
DO WHILE b<=a
DECLARE C1 CURSOR FOR
SELECT aa,
bb,
dd,
ee)
FROM :tablename
OPEN C1;
FETCH C1 INTO :aa,
:bb,
:cc,
:dd;
DO WHILE sqlca.sqlcode = 0
FETCH C1 INTO :aa,
:bb,
:cc,
:dd;
INSERT INTO mm
( aa,
bb,
cc,
dd
)
VALUES ( :aa,
:bb,
:cc,
:dd);
LOOP
CLOSE C1;
b=b+1
LOOP
问题点数:20、回复次数:6Top
1 楼braversmmu(笨鸟先飞)回复于 2004-12-01 15:05:31 得分 10
FETCH C1 INTO :aa,
:bb,
:cc,
:dd;
DO WHILE sqlca.sqlcode = 0
在这里已经取出一条记录了,所以你下面
INSERT INTO mm
( aa,
bb,
cc,
dd
)
VALUES ( :aa,
:bb,
:cc,
:dd);
会少一条Top
2 楼llkk1979(可怜菜鸟)回复于 2004-12-01 15:07:53 得分 0
该如何解决?还请高手指点?Top
3 楼wu_zh2609(蓝色的风)回复于 2004-12-01 15:13:17 得分 5
将
Do While ....
FETCH C1 INTO :aa,
loopTop
4 楼wu_zh2609(蓝色的风)回复于 2004-12-01 15:17:09 得分 5
可以用动态SQL实现开头的部分,
具体用法看PB帮助
Dynamic SQL Format 3 SQL statementTop
5 楼wu_zh2609(蓝色的风)回复于 2004-12-01 15:18:05 得分 0
PB帮助:Dynamic SQL Format 4 SQL statement
Top
6 楼llkk1979(可怜菜鸟)回复于 2004-12-01 15:32:54 得分 0
哦我知道是游标错了,我改正过来了:),但是没法用SQL动态语句实现,因为我连的是两个数据库,ODBC和SQL数据库:(,我知道如果同是SQL数据库的话,我一句INSERT XX SELECT * FROM XX就可以了,游标很慢的:(
还请哪位位高手帮我看看那个循环有没对啊,呜呜呜,谢谢各位了!Top




