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_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上出错 在>= <=上出错 但就是不知哪错了 请支招 谢谢!!
你不觉得你 引号多了吗?
不需要用单引号的地方你用了
(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; 我知道这个地方错了 但怎么改啊 没找到合适的方法 请高手支招 !!!!!!!!!!
我又改了一下,如下 代码
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||' >= to_date('''||serch_date||''',''yyyy-mm-dd hh24:mi:ss'') - 60/(24*60)
and '||v_type.tme||' <= to_date('''||serch_date||''',''yyyy-mm-dd hh24:mi:ss'') + 60/(24*60)';
dbms_output.put_line(sqlstr);
execute immediate sqlstr;提示: insert into tb_20111026_master
(imsi,imei,tme,ip,location,sequence)
select * from c
where imsi = 460007607836627
and 23-8月 -11 >= to_date('24-8月 -11','yyyy-mm-dd hh24:mi:ss') - 60/(24*60)
and 23-8月 -11 <= to_date('24-8月 -11','yyyy-mm-dd hh24:mi:ss') + 60/(24*60)
主程序出现错误,请核对!!,-920,ORA-00920: 无效的关系运算符
insert into tb_20111026_master
(imsi,imei,tme,ip,location,sequence)
select * from c
where imsi = 460007607836627
and 23-8月 -11 >= to_date('24-8月 -11','dd-mon-yy hh24:mi:ss') - 60/(24*60)
and 23-8月 -11 <= to_date('24-8月 -11','dd-mon-yy hh24:mi:ss') + 60/(24*60)
主程序出现错误,请核对!!,-920,ORA-00920: 无效的关系运算符
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;
看能不能通过编译。
(imsi,imei,tme,ip,location,sequence)
select * from '||v_table||'
where '||v_column_name||' = '||v_column_type||'
and '||to_char(v_type.tme,'yyyy-mm-dd hh24:mi:ss')||' >= to_char('''||serch_date||''',''yyyy-mm-dd hh24:mi:ss'') - 60/(24*60)
and '||to_char(v_type.tme,'yyyy-mm-dd hh24:mi:ss')'||' <= to_char('''||serch_date||''',''yyyy-mm-dd hh24:mi:ss'') + 60/(24*60)';
dbms_output.put_line(sqlstr);
execute immediate sqlstr;
sqlstr:=' insert into tb_20111026_master
(imsi,imei,tme,ip,location,sequence)
select * from '||v_table||'
where '||v_column_name||' = '||v_column_type||'
and '||to_char(v_type.tme,'yyyy-mm-dd hh24:mi:ss')||' >= to_char(to_date('''||serch_date||''',''yyyy-mm-dd hh24:mi:ss'') - 60/(24*60),''yyyy-mm-dd hh24:mi:ss'')
and '||to_char(v_type.tme,'yyyy-mm-dd hh24:mi:ss')'||' <= to_char(to_date('''||serch_date||''',''yyyy-mm-dd hh24:mi:ss'') + 60/(24*60),''yyyy-mm-dd hh24:mi:ss'')';
dbms_output.put_line(sqlstr);
execute immediate sqlstr;
insert into tb_20111026_master
(imsi,imei,tme,ip,location,sequence)
select * from c
where imsi = 460007607836627
and '2011-08-23'>=to_char(to_date('24-8月 -11','dd-mon-yy hh24:mi:ss') - 60/(24*60),'yyyy-mm-dd hh24:mi:ss')
and '2011-08-23'<= to_char(to_date('24-8月 -11','dd-mon-yy hh24:mi:ss') + 60/(24*60),'yyyy-mm-dd hh24:mi:ss')
end_time in date,
serch_date in date,存储过程的参数都是 date 类型的,你还 to_date 干嘛?