create or replace function GETDIAOXIANXINXItest(xdate in NVARCHAR2,tabledate in NVARCHAR2,linename in NVARCHAR2,busname in NVARCHAR2,TIMELABEL in number) return varchar2 is
  re nvarchar2(70);
  xsql varchar2(800);
  type my_curtype is ref cursor;
  cur my_curtype;
  type rtype is record (O_GPSDATETIME date,
                        JW   varchar2(30));
  r rtype;
begin
  xsql := xsql|| ' SELECT O_GPSDATETIME,O_LONGITUDE||'',''||O_LATITUDE AS JW';
  xsql := xsql|| ' FROM T_JK_FULLGPSDATA'||tabledate;
  xsql := xsql|| ' WHERE O_LINENAME='''||linename||''' AND O_DATE='''||xdate||'''  AND O_BUSNAME='''||busname||'''';
  xsql := xsql|| ' order by O_GPSDATETIME';
  --dbms_output.put_line(xsql);
  open cur for xsql;
  loop
    fetch cur into r;
    exit when cur%notfound;
    --if r.SJC>TIMELABEL-40 then
       if getTimeStamp(r.O_GPSDATETIME)<TIMELABEL then
          re := r.JW||'';
       end if;
   -- end if;
  end loop;
  close cur;
  return re;
end GETDIAOXIANXINXItest;
我创建了一个function 用sql调用.应该相当于子查询
" SELECT O_TIMELABEL_CLOSE," +
" GETDIAOXIANXINXItest('2012-02-01','20120201','850','5951',O_TIMELABEL_CLOSE) AS CLOSEJW    " +
" FROM T_BUSLOGIN201202 A" +
" WHERE O_CLOSEREASON='网络连接被断开' AND O_LINENAME='123'AND O_BUSNAME='23456'"  +
" AND O_DATE='2012-02-01'" +
" ORDER BY O_CLOSETIME" +可是在function 中如果用getTimeStamp(r.O_GPSDATETIME)去和传进来的参数比较时 java jdbc查询结果就返回空.但是再数据库中查询却有结果

解决方案 »

  1.   

    是不是r.O_GPSDATETIME这个字段的格式有问题啊?
      

  2.   

    JAVA代码应该没什么问题 因为jdbc是调用类 项目中都用这个类
      

  3.   

    getTimeStamp(r.O_GPSDATETIME) 代码的这个是另一个function 日期转时间戳的 如果我把这个方法换成常量比如123456 就可以在JAVA中得到结果.但是我需要遍历所有的结果看看符不符合我传进来的时间戳.如果符合就返回.可是我用这个方法转成时间戳进行比较.在PL调试中是可以正常返回结果的.但是JAVA接到的是NULL.希望高人帮我想想这是为什么呢.我已经在方法中用到了TO_number了.