ORA-02149與變數賦值

shiyihai發表於2007-10-29

最近在將一heap日誌表調整為partition的日誌表時,發現一個問題,那就是查詢分割槽資料時無法直接按變數來進行查詢。過程如下:
insert into t_actionlog_backup
select * from t_actionlog partition(v_partition_name)

[@more@]

其中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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章