急!一个存储过程出现问题,急等高手公司应用需要开发个东西,具体存储过程是这样的,现在出现了个问题,请看一下是为什么?谢谢
create or replace procedure PROC_STATIC_REGUSER_DAILY is
    tmp_id       number(18) ;
    tmp_loginname    varchar2(20);
    tmp_usersource    number(18);
    tmp_static_date  varchar2(256);
    tmp_date    date;  cursor STATIC_REGUSER_DAILY_CURSOR_1 is
     (select u.login_name,u.registered_date,u.user_source 
       from users u 
       where to_char(u.registered_date,'YYYY-MM-DD') = tmp_static_date);begin
   tmp_static_date := to_char(sysdate-1,'YYYY-MM-DD');
   open STATIC_REGUSER_DAILY_CURSOR_1;
   loop 
      fetch
           STATIC_REGUSER_DAILY_CURSOR_1
      into
           tmp_loginname,    
           tmp_date,              ----------这里的时间变成了(26 -7月-09)?
           tmp_usersource;    
      exit when STATIC_REGUSER_DAILY_CURSOR_1%notfound;      select STATIC_REGUSER_DAILY_SEQ.Nextval into tmp_id from dual;
      insert into STATIC_REGUSER_DAILY_TEMP(
                                                               ID,
                                                               LOGINNAME,
                                                               STATIC_DATE,
                                                               USERSOURCE
                                                           )
                                                   values(
                                                               tmp_id,
                                                               tmp_loginname,
                                                               tmp_date,
                                                               tmp_usersource
                                                           );
     end loop;
     close STATIC_REGUSER_DAILY_CURSOR_1;
     commit;
     end PROC_STATIC_REGUSER_DAILY;上面cursor查询出来的日期格式为什么没有用了?如果单个运行cursor内的查询,日期显示是YYYY-MM-DD的,但是定义的变量被赋值就赋成了26 -7月-09?

解决方案 »

  1.   

    是如何知道在那里变成26-7月-09了呢,这个也是日期类型呀,显示只和数据库字符集有关,不必担心。
    查查STATIC_REGUSER_DAILY_TEMP表中STATIC_DATE字段赋值成功了吗?
      

  2.   

    赋值成功是成功了 但是出来的值只是 26-7月-09
    而我取的值是yyyymmdd的 并且赋予变量值的原表中数据存在着yyyy-mm-dd hh24:mi:ss 
    但是插入的新表忽略了hh24:mi:ss只有26-7月-09
      

  3.   

    select to_char(STATIC_DATE,'yyyy-mm-dd hh24:mi:ss') from STATIC_REGUSER_DAILY_TEMP;看看出来的值是什么
      

  4.   

    这是由于你的 nls_data_format 参数未配置成 yyyy-mm-dd hh24:mi:ss
    你查询表的时候,应该是用了 pl/sql 这样的工具吧,pl/sql 工具首选项设置里,可以修改日期显示格式,但是你的应用调用存储过程时,日期格式用的是服务器的默认格式,所以会看到 26-7月-09 这样的格式,但是只要你的类型都是 date 那就没关系,应用查询时,加上 to_char 格式化即可
      

  5.   

    查询时,加上 to_char 格式化
      

  6.   

    我看你的意思是不是原表中存在两种数据一种是如 2009-07-30 一种如 2009-07-30 17:31:00
    第一种格式的数据时可以正常转过来的,而第二种的就不行了是吧
    你可以对这个字段的长度(length)进行判断一下,如果<=10 则to_date('2009-07-30','YYYY-MM-DD')
    否则 to_date(‘2009-07-30 17:31:00’,'YYYY-MM-DD hh24:mi:ss')这样应该就可以了