现在有一个表tmp_200706,后面跟的是当月时间,要写在存储过程里,表名会跟着时间变,如何实现?当月时间可以用写到一个变量中pvi_date 
select to_char(sysdate,'yyyymm') into pvi_date from dual;但之后如何把这个变量跟tmp_ 联系起来?

解决方案 »

  1.   

    动态SQL
    EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM IMP_'||变量名 INTO pvi_date;
      

  2.   

    我先想了个办法,
    select 'tmp_'||to_char(sysdate,'yyyymm') 
    into v_table
    from dual;但是,
    select * from v_table 
    where ......
    这个v_talbe变量也不能用在这个sql里,好像变量是不能跟在from后面的,但我的表名总是
    根据时间在变化的,该如何是好?
      

  3.   

    按照 ATGC(花开蝶舞,木秀鸟栖) 的方法,过程编译没有报错了,但执行起来有些问题,EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM IMP_'||变量名 || 'where ...' INTO pvi_date;我的where里面用到一个游标,就是报游标的错,但编译没有问题
      

  4.   

    使用二楼的方法,动态SQL,先取出系统日期,然后拼成表名,再执行动态sql。