原来的存储过程如下:
create or replace procedure rpt.prc_js006_tiao
(
year_month varchar2
)
as
do_date varchar(6);
do_year_month varchar2(6);
user_num int;
do_month varchar(2);
begin
do_year_month := to_char(year_month);
do_month := substr(year_month,5,2);
select to_char(sysdate,'yyyymm') into do_date from dual;select count(*) into user_num
        from a_02 a where to_char(b.begin_date,'yyyymmdd') <= do_year_month||'31'
       and to_char(b.end_date,'yyyymmdd') >= do_year_month||'01';
.....编译成功.现在要将02改成变量do_month
这个select count(*) into user_num
        from a_02 a where to_char(b.begin_date,'yyyymmdd') <= do_year_month||'31'
       and to_char(b.end_date,'yyyymmdd') >= do_year_month||'01';
这么拼接阿 ?
麻烦给出SQL代码 谢谢哈

解决方案 »

  1.   

    改成:
    EXECUTE IMMEDIATE  
    'select count(*)  
            from a_'||do_month||' a where to_char(b.begin_date,''yyyymmdd'') <='''||do_year_month||'31'' 
          and to_char(b.end_date,''yyyymmdd'') >='''|| do_year_month||'01''' into user_num; 
      

  2.   

    create or replace procedure rpt.prc_js006_tiao
    (
    year_month varchar2
    )
    as
    do_date varchar(6);
    do_year_month varchar2(6);
    user_num int;
    do_month varchar(2);
    sql varchar2(2000);
    begin
    do_year_month := to_char(year_month);
    do_month := substr(year_month,5,2);
    select to_char(sysdate,'yyyymm') into do_date from dual;sql:='select count(*) into user_num
            from a_'||do_month||' a where to_char(b.begin_date,'''yyyymmdd''') <= 'do_year_month||'''31'''
           and to_char(b.end_date,'''yyyymmdd''') >=' do_year_month||'''01''';
    .....