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查询结果就返回空.但是再数据库中查询却有结果
4 个解决方案
#1
JAVA写的代码的问题吧
#2
是不是r.O_GPSDATETIME这个字段的格式有问题啊?
#3
JAVA代码应该没什么问题 因为jdbc是调用类 项目中都用这个类
#4
getTimeStamp(r.O_GPSDATETIME) 代码的这个是另一个function 日期转时间戳的 如果我把这个方法换成常量比如123456 就可以在JAVA中得到结果.但是我需要遍历所有的结果看看符不符合我传进来的时间戳.如果符合就返回.可是我用这个方法转成时间戳进行比较.在PL调试中是可以正常返回结果的.但是JAVA接到的是NULL.希望高人帮我想想这是为什么呢.我已经在方法中用到了TO_number了.
#1
JAVA写的代码的问题吧
#2
是不是r.O_GPSDATETIME这个字段的格式有问题啊?
#3
JAVA代码应该没什么问题 因为jdbc是调用类 项目中都用这个类
#4
getTimeStamp(r.O_GPSDATETIME) 代码的这个是另一个function 日期转时间戳的 如果我把这个方法换成常量比如123456 就可以在JAVA中得到结果.但是我需要遍历所有的结果看看符不符合我传进来的时间戳.如果符合就返回.可是我用这个方法转成时间戳进行比较.在PL调试中是可以正常返回结果的.但是JAVA接到的是NULL.希望高人帮我想想这是为什么呢.我已经在方法中用到了TO_number了.