create or replace package body pqe_particlepkg
as
procedure PQE_getBasicInfor_sp
(
 v_fab pqe_pointlayout.FAB%type,
 v_location pqe_particleinfor_panel.LOCATION%type,
 v_class pqe_pointlayout.POINTCLASS%type,
 v_datefrom pqe_particleinfor_panel.CREATEDATE%type,
 v_dateto pqe_particleinfor_panel.CREATEDATE%type,
 v_ds out SYS_REFCURSOR
)
as
str varchar2(2000);
str :='';
str :=str||'select A.fab,C.LOCATION,A.pointclass CLEANCLASS,C.CREATEDATE,C.CREATETIME,C.UM_01,C.UM_02,C.UM_03,C.UM_05,C.UM_1,C.UM_5, ';
str :=str||'(C.UM_01+C.UM_02+C.UM_03+C.UM_05+C.UM_1+C.UM_5) TOTAL ';
str :=str||'from pqe_pointlayout A,(SELECT MAX(CREATEDATE) CREATEDATE,MAX(CREATETIME) CREATETIME, LOCATION,ROUND(AVG(UM_01)) UM_01,ROUND(AVG(UM_02)) UM_02,ROUND(AVG(UM_03)) UM_03, ';
str :=str||'ROUND(AVG(UM_05)) UM_05,ROUND(AVG(UM_1)) UM_1, ROUND(AVG(UM_5)) UM_5 ';
str :=str||'FROM  pqe_particleinfor_panel GROUP BY LOCATION) c WHERE A.POINTCODE=C.LOCATION '; begin
if (v_class='ALL')
str :=str;
else
str :=str|| and A.pointclass=v_class;
end if;
---
--if 
---
--else
open v_ds for 
str;
end;
end;这里定义了一个package,根据不同的条件重新组合上述sql语句,最后执行返回记录集。
不知道怎么整?

解决方案 »

  1.   

    str :=str|| and A.pointclass=v_class;
    改成
    str :=str|| 'and A.pointclass='''  || v_class || '''';
      

  2.   

    给个建议。
    最后的sql有错的时候,看看最后出来的哪不对
    dbms_output.put_line(str);
      

  3.   

    这样连接的结果提示每行的长度太长,也就是我那个sql语句连接的时候str长度一直增长,导致报错。
    难道要换行?如何换?ORA-20000: ORU-10028: line length overflow, limit of 255 chars per line