最近在工作中由于实际需要将一heap日志表调整为partition的日志表时,发现一个问题,那就是查询分区数据时无法直接按变量来进行查询。过程如下: insert into t_actionlog_backup 0select * from t_actionlog partition(v_partition_name)
其中v_partition_name是我程序中传入的分区名称变量,结果无论我怎么调试都抛异常“ORA-02149: 指定的分区不存在”。 我直接在sql提示符下执行都是没问题的。见如下的过程: declare v_partition_name varchar2(20). begin v_partition_name :=’p_2007 1016’. insert into t_actionlog_backup 0select * from t_actionlog partition(v_partition_name). end. ORA-02149: 指定的分区不存在 ORA-06512: 在line 5 SQL> SQL> insert into t_actionlog_backup 2 0select * 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 0select * from t_actionlog partition(’||v_partition_name||’)’. 6 end. 7 / PL/SQL procedure successfully completed SQL>