2012-07-23 80 views
9

我正在將MSSQL腳本轉換爲Oracle,並且我還無法弄清楚使用變量代替表名或列的語法。Oracle SQL:用於替換表名稱的變量

下面是一個簡單的例子,我一直試圖在Oracle SQL Developer中工作,這樣我就可以更好地理解語法:

set serveroutput on format wrapped; 
declare 
    VR_TABLE VARCHAR2(256); 
    VR_UPDATE VARCHAR2(256); 
begin 
    VR_TABLE :='SYSTEM_STATUS'; 
    EXECUTE IMMEDIATE 'select UPDATE_VERSION INTO VR_UPDATE from ' || VR_TABLE || 'where rownum < 2 ;' 
end; 

哪裏VR_TABLE是將得到改變每次迭代變量表名的循環。 有人可以指出我做錯了什麼,或者將我鏈接到一個對我有用的網站?我已閱讀了一些關於此的教程,但迄今爲止我還沒有任何運氣。

回答

15
  1. 你需要有表名和隨後WHERE條款
  2. INTO需要在EXECUTE IMMEDIATE的一部分,而不是動態SQL語句的一部分之間的空間。
  3. 動態SQL語句不應該有一個尾隨分號
  4. EXECUTE IMMEDIATE語句應該以分號

把這些一起結束了,這樣的事情應該工作

declare 
    VR_TABLE VARCHAR2(256); 
    VR_UPDATE VARCHAR2(256); 
begin 
    VR_TABLE :='SYSTEM_STATUS'; 
    EXECUTE IMMEDIATE 'select UPDATE_VERSION from ' || VR_TABLE || ' where rownum < 2' 
       INTO VR_UPDATE; 
end; 

當然,因爲你沒有對VR_UPDATE做任何事情,當這個匿名塊被執行時什麼都不會顯示。