pl / sql-to_date不与执行立即参数

| 我想能够像下面这样执行我的下面的proc:
exec procname(\'29-JAN-2011\');
proc代码是:
PROCEDURE procname(pardate VARCHAR2) IS

  vardate DATE := to_date(pardate, \'DD-MON-YYYY\');
  SQLS VARCHAR2(4000);

BEGIN    

  SQLS := \'SELECT cola, colb
             FROM tablea 
            WHERE TRUNC(coldate) = TRUNC(TO_DATE(\'\'\'||pardate||\'\'\',\'\'DD/MON/YYYY\'\'))\';

  EXECUTE IMMEDIATE SQLS;

END;
它不断抛出错误:   ORA-00904:\“ JAN \”:无效的标识符。 它可以编译,但是在运行以下命令时会引发错误:
EXEC procname(\'29-JAN-2011\');
    
已邀请:
        您声明一个将输入参数强制转换为日期的变量:为什么不使用它呢? 同样,应用于日期的TRUNC()会删除时间元素。您在这里不需要它,因为您传递的值没有时间。 因此,您的代码应为:
PROCEDURE procname(pardate VARCHAR2) IS

  vardate DATE := to_date(pardate, \'DD-MON-YYYY\');
  SQLS VARCHAR2(4000)  := \'select cola, colb FROM tablea 
           WHERE TRUNC(coldate) = :1\';

   l_a tablea.cola%type;
   l_b tablea.colb%type;
BEGIN    
  EXECUTE IMMEDIATE SQLS 
      into l_a, l_b
      using vardate;
END;  
使用绑定变量指定动态SQL语句并使用USING语法执行它会更有效率。注意,我们仍然必须选择一些变量。     
        您在两次调用
to_date
时使用了两种不同的表示法。我认为其中一个(第二个)是错误的。     

要回复问题请先登录注册