比較符號兩邊型別保持一致

shuangoracle發表於2011-02-11
今天測試的時候搞了半天才弄明白,記錄一下。
create or replace procedure proc_test(startdate VARCHAR2) as
v_date date; --清理時間點
v_GTH_AGT_IN_count number; --需清理的個數
v_query_create varchar2(3000); --存放建立臨時表的語句
begin
v_date := to_date(startdate, 'yyyy-mm-dd');
v_GTH_AGT_IN_count := 0;
select count(*)
into v_GTH_AGT_IN_count
from GTH_AGT_IN t
where logdate <= v_date;
if v_GTH_AGT_IN_count > 0 then
--insert
v_query_create := 'insert into test_table_his as select * from test_table t where t.logdate <= to_date(' ||
to_char(v_date, 'yyyy-mm-dd') || ',''yyyy-mm-dd'')';
EXECUTE IMMEDIATE v_query_create;
/* 上面這兩句也可以使用下面這兩句
v_query_create := 'insert into his_GTH_AGT_IN as select * from GTH_AGT_IN t where t.logdate <= :v_date';
execute immediate v_query_create using v_date;
*/
--delete
v_query_create := 'delete test_table t where t.logdate <= to_date(' ||
to_char(v_date, 'yyyy-mm-dd') || ',''yyyy-mm-dd'')';
EXECUTE IMMEDIATE v_query_create;
/* 上面這兩句也可以使用下面這兩句
v_query_create := 'delete GTH_AGT_IN t where t.logdate <= :v_date';
execute immediate v_query_create using v_date;
*/
end if;
commit;
end proc_test;
動態sql中字串和v_date(date型別)拼接起來,導致v_date隱式轉化為字元型別。一定要保證比較符號兩邊型別一致。
[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24496749/viewspace-1045841/,如需轉載,請註明出處,否則將追究法律責任。

相關文章