CREATE TABLE TEMP NOLOGGING AS 
SELECT A.*,
FROM  date_20111226 a 
WHERE TYPE5='离子' AND ACC_NAME LIKE '%3%' ;
commit;想把上面这段话写成一个过程,date_20111226  这个是个变量,每周跑一次,下一次在26+7号,这一天,怎么写成
DECLARE
      sql_1 varchar2(100);
BEGIN       
      sql_1:='CREATE TABLE TEMP NOLOGGING AS 
      SELECT A.*,
      FROM  date_'||to_char((sysdate-1),'yyyymmdd')||' a 
      WHERE TYPE5='离子' AND ACC_NAME LIKE '%3%' ;
END; 这样啊,问题在于where后面那个条件应该怎么写,whERE TYPE5='离子' AND ACC_NAME LIKE '%3%' ;本人小菜鸟,知道的人解答下哈

解决方案 »

  1.   

    这种表名当变量的估计要用到动态sql
      

  2.   

    定义个变量下面这样写吧:
    CREATE TABLE TEMP NOLOGGING AS  
    SELECT A.*,
    FROM date_20111226 a  
    WHERE TYPE5=:变量 AND ACC_NAME LIKE '%3%' ;
      

  3.   

    create or replace procedure proc_test
    (
        table_name in varchar2,      --表名 
    ) as 
        str_sql varchar2(500);
    begin 
        str_sql:= 'SELECT A.*,
    FROM ''||table_name|| a  
    WHERE TYPE5='离子' AND ACC_NAME LIKE '%3%' ;';
        execute immediate str_sql;   --动态执行DDL语句
        exception when others then 
                null;
    end; 至于每周跑一次,下一次在26+7号,这一天 你可以定个JOB跑
      

  4.   

    支持3楼意见,定个job跑,在这个job里创建一个触发器
    create trigger trigger_temp 
    on date_20111226
    when to_char(sysdate,'DAY HH24:MI:SS')=='MONDAY 19:30:00' --设置每周触发具体时间
    begin
      --触发的事件,比如调用3楼的存储过程
      call proc_test(date_20111226);
    end trigger_temp;