各路大神额,请教一下。我要查询表M21_RECEIPT_INFO的数据,分页查询,查询第一页,每页10条记录,但是发现游标定义处的条件并不起作用,就是会把表里的所有数据都查出来。为什么条件不起作用呢?EXEC SQL DECLARE receipt_cursor CURSOR FOR 
SELECT * FROM (
SELECT M1.*,ROWNUM RN FROM(
SELECT * FROM M21_RECEIPT_INFO M WHERE TELLER_NUMBER =:teller_number1 AND 
SAVE_RESULT =:save_result1 AND TRANDE_TIME<=:end_time AND TRANDE_TIME >= :begin_time)M1
WHERE ROWNUM <= 10)M2
WHERE M2.RN >0;EXEC SQL OPEN receipt_cursor;//打开游标
for(;i<=number;i++)
{
EXEC SQL FETCH receipt_cursor INTO :receipt_tables;
if(i==1)
snprintf(sFhnr,sizeof(sFhnr),"%s||%s||%s||%s||%s||%d",receipt_tables.receipt_number,receipt_tables.trande_type,receipt_tables.customer_name,receipt_tables.trande_time,receipt_tables.save_result,receipt_tables.reprint_number);
else
sprintf(sFhnr,"%s^%s||%s||%s||%s||%s||%d",sFhnr,receipt_tables.receipt_number,receipt_tables.trande_type,receipt_tables.customer_name,receipt_tables.trande_time,receipt_tables.save_result,receipt_tables.reprint_number);
}
EXEC SQL CLOSE receipt_cursor;//关闭游标

解决方案 »

  1.   

    SELECT *,ROWNUM  RN  FROM M21_RECEIPT_INFO M WHERE TELLER_NUMBER =:teller_number1 AND 
                SAVE_RESULT =:save_result1 AND TRANDE_TIME<=:end_time AND TRANDE_TIME >= :begin_time)M1
            WHERE ROWNUM <= 10
    呢 
      

  2.   

    同意楼上的
    SELECT *,ROWNUM  RN  FROM M21_RECEIPT_INFO M WHERE TELLER_NUMBER =:teller_number1 AND 
                SAVE_RESULT =:save_result1 AND TRANDE_TIME<=:end_time AND TRANDE_TIME >= :begin_time)M1
            WHERE ROWNUM <= 10
      

  3.   

    在直接使用rownum在做条件的时候,必须包含rownum=0,例如
    select * from  a
      where rownum <= 10;
    需要查询不包含0的时候,需要将rownum作为实列,例如
    select * from
     (
      select a.*, rownum as rn from  a
      ) b
    where b.rn between 6 and 10;