提示 无效数字 不解
create or replace procedure sp_20111024_master_procedure
( v_column_name in varchar2,
v_column_type in varchar2,
begin_time in date,
end_time in date,
serch_date in date,
tmep_tablename1 in varchar2,
v_num in number,
return_chage out number,
return_num out number
) is
v_table varchar2(16);
sqlstr varchar2(4096);
v_cursor sys_refcursor;
v_type gsmdata%rowtype;
erre_reciev number;
begin
--调用存储过程,使用返回的表及游标,以便下面使用。
sp_20111024_time_slot(begin_time,end_time,tmep_tablename1,erre_reciev,v_table);
sqlstr:='create table tb_20111026_master (imsi varchar2(16),
imei varchar2(16),
tme date,
ip varchar2(8),
location varchar2(64),
sequence number(10)
)';
execute immediate sqlstr;
--循环查询两个表中相同的数据,存入结果表。
sqlstr:='select * from '||v_table||'';
execute immediate sqlstr;
open v_cursor for sqlstr;
loop
fetch v_cursor into v_type;
exit when v_cursor%notfound;
sqlstr:=' insert into tb_20111026_master
(imsi,imei,tme,ip,location,sequence)
select * from '||v_table||'
where '''||v_column_name||'''='''||v_column_type||''' and '''||v_type.tme||''' >= '''||serch_date||''' - '''||v_num||'''/(24*60*60) and '''||v_type.tme||''' <= '''||serch_date||''' + '''||v_num||'''/(24*60*60)';
execute immediate sqlstr; --时间是日期型 结果却是数值型
end loop;
commit;
--将结果作为表返回。
--result_table:=tb_20111025_master;
exception
when others then
return_num:=1;
return_chage:=erre_reciev;
dbms_output.put_line('主程序出现错误,请核对!!'||','||sqlcode||','||sqlerrm);
end sp_20111024_master_procedure;
结果提示无效数字,我确定是在中间sqlstr上出错 在>= <=上出错 但就是不知哪错了 请支招 谢谢!!
------解决方案--------------------'''||v_num||'''
------解决方案--------------------v_num 去掉前后 ''
------解决方案--------------------where '''||v_column_name||'''='''||v_column_type||''' and '''||v_type.tme||''' >= '''||serch_date||''' - '''||v_num||'''/(24*60*60) and '''||v_type.tme||''' <= '''||serch_date||''' + '''||v_num||'''/(24*60*60)';
你不觉得你 引号多了吗?
不需要用单引号的地方你用了
------解决方案--------------------把sqlstr值打印出来看一下,这样容易找错!
------解决方案--------------------把 23-8月 -11 转成日期
to_date('24-8月-11','dd-mon-yy')
------解决方案--------------------前面的23-8月-11 也转成日期比较
and to_date('23-8月 -11','dd-mon-yy') >= 。。。
and to_date('23-8月 -11','dd-mon-yy') <= 。。
------解决方案--------------------即使不用转, 你也应该用打上引号吧。
不转的话 这个日期字符串 不能隐式的转成与日期, 无法与日期进行比较的。
你可以用select 语句测试下:
select '23-8月 -11' - to_date('24-8月 -11','dd-mon-yy hh24:mi:ss')
from dual;
看能不能通过编译。
------解决方案--------------------