execute immediate 'update temp1 set c10= (select ''['' || to_char(LogTIME,''YYYY.MM'') || '']'' from TempTable )'; 
--上面结果返回[2009.01] execute immediate 'update temp1 set c10= (select to_char(LogTIME,''YYYY.MM'') from TempTable )'; 
--上面结果返回2009.01.01 但是不加.取出来的数据是正确的. 
execute immediate 'update temp1 set c10= (select to_char(LogTIME,''YYYYMM'') from TempTable )'; 
返回的是200901 为什么? 我怎么才能让上面的语句返回2009.01这种格式?
没分了,只有20分,请见谅.

解决方案 »

  1.   

    执行select看得到的是什么结果
    select to_char(LogTIME,''YYYY.MM'') from TempTable
      

  2.   

    select to_char(LogTIME,'YYYY.MM') from TempTable这语句直接执行肯定是没问题的,但是用execute immediate 去执行,就成了错误的了.
      

  3.   

    execute immediate 'update temp1 set c10= (select REPLACE(to_char(LogTIME,''YYYY-MM''),''-'',''.'') from TempTable )'; 
      

  4.   

    sys@ORCL> select * from temp1;C1                   C2
    -------------------- --------------
    2009.04              17-4月 -09sys@ORCL> begin
      2  execute immediate 'update temp1 set c1=(select to_char(sysdate-56,''yyyy.mm'') from dual)';
      3  end;
      4  /PL/SQL 过程已成功完成。sys@ORCL> commit;提交完成。sys@ORCL(192.168.21.110)>  select * from temp1;C1                   C2
    -------------------- --------------
    2009.02              17-4月 -09
      

  5.   

    declare 
      cDate varchar2(10) := '';
    begin
      execute immediate 'select c10 from temp1' into cDate ;
      
      dbms_output.put_line('org value:' || cDate);
      
      execute immediate 'select to_char(SYSDATE,''YYYY.MM'') from dual' into cDate ;
      
      dbms_output.put_line('updating value:' || cDate);
      
      execute immediate 'update temp1 set c10 = :1' using cDate ;
      
      execute immediate 'select c10 from temp1' into cDate ;
      
      dbms_output.put_line('new value:' || cDate);
    end;
    逐步确认下
    execute immediate不应该有问题的
      

  6.   

    问题解决,疑问还在: execute immediate 'update temp1 set c10= (select to_char(LogTIME,''YYYY" - "MM'') from TempTable ) yyyy和MM当中用一个全角的-就解决了,但是用.或者半角的-就是不行.超级奇怪,怀疑是不是Oracle的BUG.