2012-07-23 60 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做任何事情,当这个匿名块被执行时什么都不会显示。