小编典典

Oracle SQL:用于代替表名的变量

sql

我正在将MSSQL脚本转换为Oracle,但无法弄清楚使用变量代替表名或列的语法。

这是我尝试在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是变量表名称,该变量表名称将在循环的每次迭代中更改。有人可以指出我做错了什么,还是可以将我链接到一个对我来说有用的网站?我已经阅读了一些有关此的教程,但是到目前为止,我还没有碰到任何运气。


阅读 189

收藏
2021-05-05

共1个答案

小编典典

  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,因此在执行此匿名块时将不会显示任何内容。

2021-05-05