declare 
  qrq date ;
  hrq  date;
  SQL1 VARCHAR2(130);
  SQL2 VARCHAR2(13000);
  SQL3 VARCHAR2(13000);
  SQL4 VARCHAR2(30000);
 begin
   
   QRQ:=to_date('2016-12-26','yyyy-mm-dd');
   HRQ:=to_date('2017-01-25','yyyy-mm-dd');
    SQL1:='select a.ryxm as 姓名,'; 
   sql2:='count(CASE WHEN B.TXNDATESN=to_number(to_char(qrq,"yyyymmdd"),"99999999")  THEN b.posseq END) AS substr(to_char(qrq,"yyyymmdd"),5,4) || to_char(qrq,"day")';
    while QRQ < hRQ 
       loop
       sql2:=sql2 || 'count(CASE WHEN B.TXNDATESN=to_number(to_char(qrq,"yyyymmdd"),"99999999")  THEN b.posseq END) AS  substr(to_char(qrq,"yyyymmdd"),5,4) || to_char(qrq,"day")';
       QRQ:=qrq+1;
       end loop;
     SQL3:=' from gjzg a,TDCXTXNDETAILTB20170101 b  where a.ygkh=b.cardid and a.txntype=31 and to_char(b.busid)=055555 and b.TXNDATESN>=to_number(to_char(qrq,"yyyymmdd"),"99999999")  and b.TXNDATESN<=to_number(to_char(hrq,"yyyymmdd"),"99999999")  group by a.ryxm';
     SQL4:=SQL1 || SQL2 || sql3;
 end;

解决方案 »

  1.   

    当然没结果,你只是变量赋值,根本没打印之类的操作,在end前加一行打印看看结果dbms_output.put_line(SQL4);
      

  2.   

    用游标打开,然后遍历print。
    你的语句太长,给你示例,参照补充上即可。set serveroutput ondeclare
    sql1  varchar2(1000);
    mycursor1 sys_refcursor;
    e EMP%ROWTYPE;
    begin
      sql1 := 'select * from emp ';
      open mycursor1 for sql1;
     loop
     fetch mycursor1 into e; 
       exit when mycursor1%notfound;
      dbms_output.put_line(e.ename || ' : ' || e.job);
     end loop;
    end;
      

  3.   

    使用游标,然后for循环dbms_output.put_line() 输出
      

  4.   

    set serveroutput on这个别忘记