大家好:       我写了一个存储过程,有两个输入参数,分别是时间:小时和日期:年月日,存储过程中将这两个参数连接起来,       
比如输入的参数是小时:13,日期20071115,连接后,得到两个日期分别为       
20071115   13:00:00   和               
20071115   13:59:59       但是将他们用to_date函数转换成date类型插入数据库的时候,数据库相应字段中的两个日期都成了却变成了 
20071115 0:00:00,       
不知怎么回事???       存储过程代码如下       
CREATE OR REPLACE PROCEDURE STA(       
    hour  in  varchar2,       
    riqi  in  varchar2       
)IS       begintime    varchar2(17);       
    endtime      varchar2(17);       
    sqlstr       varchar2(4000);       BEGIN   begintime := statdate ¦¦ ' ' ¦¦ stathour ¦¦ ':00:00 ';   
endtime   := statdate ¦¦ ' ' ¦¦ stathour ¦¦ ':59:59 ';   sqlstr := ' insert into AAA(OPE_DATE) values(' ''¦¦to_date(begintime, 'yyyymmdd   hh24:mi:ss ')¦¦''  ') ';   execute immediate  sqlstr;   END  STA;       但是,我用其他方法验证,字符串变量begintime的值的确是20071115   13:00:00,       
为什么用to_date(begintime,   'yyyymmdd   hh24:mi:ss ';)转换后就变成20071115   0:00:00了呢???       小弟在线等!!!!谢谢!!!

解决方案 »

  1.   

    sqlstr   :=   '   insert   into   AAA(OPE_DATE)   values(to_date('''||begintime||''', ''yyyymmdd hh24:mi:ss'')';
      

  2.   

    bobfang,您的代码,好像少了一个右括号
      

  3.   

    你原先的写法是在拼sql时把begintime 转成日期型进行拼的,而oracle会自动把日期转为字符型(使用当前设置的日期格式),所以就等于你拼的sql是insert into ... values('STRING'),就是插入一个字符型,在执行sql时,由于要插入的字段是date型,系统自动使用当前的日期格式对字符型转换。估计你的系统缺省的日期格式是'YYYYMMDD'或者是'yyyy-mm-dd'之类的无时间部分的格式,所以在第一次日期转字符时就丢掉了时间部分,而第二次字符转日期时,正好这个字符串没有时间部分,符合当前日期格式,转换成功,插入到数据库中了,数据库中自动填上00:00:00。
      

  4.   

     ' ' ' ¦ ¦begintime ¦ ¦ ' ' ' 必须是字符型的  || 是连接 '''|| ||''' 连起来就是一个字符串型了
    如 c:='cc'; p:='tt'; cp=c||p