將表名作為繫結變數的非法操作

lihy114發表於2013-09-30

在動態sql中使用繫結變數,程式碼如下
           v_sql :='insert into remark(code,name)  select code,name from :xn';
               execute immediate v_sql using v_tablename;

在執行的時候報錯

ora-00903:invalid table name

論壇裡面的一位版主告訴我:

不能將表名、列名作為繫結變數,因為這樣是沒有意義的

我的理解如下:繫結變數的好處是為了共享執行計劃,避免多次的硬解析;但是如果表名或者列名使用了繫結變數,即便oralce認可了,共享了執行計劃,但是對於不同的表或者列,一般最優的執行計劃是不同的;所以共享的執行計劃對於新的表來講是沒有意義的,也是不可取的

 



 

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

相關文章