CREATE OR REPLACE FUNCTION is_exit (i_n IN NUMBER)
   RETURN NUMBER
IS
   vc_year    VARCHAR2 (4)
                         := TO_CHAR (ADD_MONTHS (TRUNC (SYSDATE), -1),
                                     'yyyy');
   vc_month   VARCHAR2 (2) := TO_CHAR (ADD_MONTHS (TRUNC (SYSDATE), -1),
                                       'mm');
   vc_tab     VARCHAR2 (30);
   n_exit    NUMBER;
   vc_sql     VARCHAR2 (1024);
BEGIN
   vc_tab := 'product_' || vc_year || vc_month;
   vc_sql := 'select count(1) into n_valid from  ' || vc_tab;
--- 这个地方编译是没问题的。表名每月都变化,不知道这个地方怎么调用拼凑起来的表名。
   RETURN n_exit;
END;
函数功能 是输入一个数字,判断是否在每月有规律生成的表中, 比方product_201308 
这个地方不知道如何带入。函数调用会出错  ORA-00905: 缺失关键字 我知道错误在动态语句不能用 select into ,但这个地方该如何改?

解决方案 »

  1.   

    这段代码落掉了一行 EXECUTE IMMEDIATE vc_sql;
      

  2.   

    vc_sql := 'select count(1) n_valid from  ' || vc_tab; 
    execute immediate vc_sql;
      

  3.   

    vc_sql := 'select count(1)  from  ' || vc_tab; 
    execute immediate vc_sql into  n_valid;
      

  4.   

    vc_sql := 'select count(1)  from  ' || vc_tab; 
    execute immediate vc_sql into  n_valid; if n_valid >0 then
      --存在
    else
      --不存在
    end if;