如下的语句:
execute immediate 'SELECT SJ - TO_DATE('2009-11-22', 'yyyy-mm-dd hh24:mi:ss') FROM TEMP_TABLE 
where rownum<2' INTO V_NUM;这样写不可以吗?~~~为什么呢~~?

解决方案 »

  1.   

    --直接这样写不可以吗?
    SELECT SJ - TO_DATE('2009-11-22', 'yyyy-mm-dd hh24:mi:ss') FROM TEMP_TABLE  
    where rownum<2 INTO V_NUM;
      

  2.   


    需要用动态的SQL语句实现,可是我这方面很弱哎~~~~
    用动态的sQL语句可以实现吗?~~~
      

  3.   


    首先你的sj 是date类型否把你的上面改成这样的
    TO_DATE(''2009-11-22'', ''yyyy-mm-dd hh24:mi:ss'')
      

  4.   

    SJ - TO_DATE('2009-11-22', 'yyyy-mm-dd')--你的这两个格式不一致
      

  5.   

    嗯,SJ是date类型的,SJ - TO_DATE('2009-11-22', 'yyyy-mm-dd')就是为了得到这两个时间相差的天数~改为:TO_DATE(''2009-11-22'', ''yyyy-mm-dd hh24:mi:ss'')也不行呀~~~
      

  6.   

    execute immediate 'SELECT SJ - TO_DATE('2009-11-22', 'yyyy-mm-dd') FROM TEMP_TABLE  
    where rownum<2' INTO V_NUM;
    如果这样不行 看看报什么错误
      

  7.   

    --我随便写了个 你的报什么错
    SQL> edi
    已写入 file afiedt.buf  1  declare
      2  v number;
      3  begin
      4  execute immediate 'select sysdate-TO_DATE(''2009-11-22'', ''yyyy-mm-dd hh24:mi:ss'') from dual'
      5  dbms_output.put_line(v);
      6* end;
    SQL> /
    307.44587962962962962962962962962962963PL/SQL 过程已成功完成。
      

  8.   

    首先你的sj 是date类型否
    把你的上面改成这样的
    TO_DATE(''2009-11-22'', ''yyyy-mm-dd hh24:mi:ss'')
    [/Quote]
    嗯,这样执行成功了~~!!!可是为什么要多加单引号"'"呢?不明白呢~wkc168可不可以帮我讲解一下呀,O(∩_∩)O谢谢
      

  9.   

    嗯,这样执行成功了~~!!!可是为什么要多加单引号"'"呢?不明白呢~wkc168可不可以帮我讲解一下呀,O(∩_∩)O谢谢
    [/Quote]转义  如果单引号里含有单引号的话 就要两个单引号
      

  10.   

    嗯,这样执行成功了~~!!!可是为什么要多加单引号"'"呢?不明白呢~wkc168可不可以帮我讲解一下呀,O(∩_∩)O谢谢
    [/Quote]在动态的语句里面要是本身如时间格式含有 '  要改为''   这样说吧' '转意为 '可以单独的  去试试便知 下面是列子 英文字符aa's  写sql  的时候  'aa''s' 如下面的例子  1* select 'aa''s' from dual
    SQL> /'AA'
    ----
    aa's
      

  11.   

    (⊙o⊙)哦~这样,明白了,O(∩_∩)O谢谢大家了~~~继续学习了~