最近在将一heap日志表调整为partition的日志表时,发现一个问题,那就是查询分区数据时无法直接按变量来进行查询。过程如下:
insert into t_actionlog_backup
select * from t_actionlog partition(v_partition_name)
其中v_partition_name是我程序中传入的分区名称变量,结果无论我怎么调试都抛异常“ORA-02149: 指定的分区不存在”。
我直接在sql提示符下执行都是没问题的。见如下的过程:
declare
v_partition_name varchar2(20);
begin
v_partition_name :='p_20071016';
insert into t_actionlog_backup
select * from t_actionlog partition(v_partition_name);
end;
ORA-02149: 指定的分区不存在
ORA-06512: 在line 5
SQL>
SQL> insert into t_actionlog_backup
2 select * from t_actionlog partition(p_20071016);
46 rows inserted
SQL>
没办法,只能用动态sql来解决。
SQL> declare
2 v_partition_name varchar2(20);
3 begin
4 v_partition_name :='p_20071016';
5 execute immediate 'insert into t_actionlog_backup select * from t_actionlog partition('||v_partition_name||')';
6 end;
7 /
PL/SQL procedure successfully completed
SQL>
开始怀疑oracle数据库的低能。。。。。。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/38542/viewspace-979427/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/38542/viewspace-979427/