sql:='select * from table1 where to_char(upd_date,'yyyymmdd')>='''||to_char(id_date,'yyyymmdd')||'''';

解决方案 »

  1.   

    上面写的没错,但是在字段上通常能不加函数就不要加,否则会影响效率。所以改成:
    ...
    BEGIN
       SQL :=  'select * from table1 where upd_date>=to_date('''
           || TO_CHAR (id_date, 'yyyymmdd')
           || ''',''yyyymmdd'')';
       ...
    END;
      

  2.   

    --为了处理需要,这里最好传varchar2,这样你调用也方便,过程处理也方便
    --但最好要保证是合法的日期如'2002-12-18 10:10:10',如果传入是date,
    --照上面KingSunSha(弱水三千)的语句合并法
    produce a (id_date in varchar2)
    as 
       --200吧,50有点短,没有必要给初值
       lv_sql varchar(200);
       --定义aa为一个ref cursor,这个语句如果用到包,可以写到包头里
       type aa is ref cursor;
       --这里反了吧,应当是定义mycursor为aa
       mycursor aa;
    begin 
      --合并你的语句,date类型需要转换,这里''代表字符串中一个'
      --'yyyy-mm-dd hh24:mi:ss'可以自己定义
      sql='select * from table1 where upd_date >=to_date('''
      || id_date || ''',''yyyy-mm-dd hh24:mi:ss'');
      open mycursor for sql;
    --异常处理需要语句。
    execption
       when others then
         raise;
    end a;
      

  3.   

    照你的过程应当是
    sql varchar(200);