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

Ora*_*ver 9 sql oracle plsql

我正在将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;
Run Code Online (Sandbox Code Playgroud)

其中VR_TABLE是变量表名,它将在循环的每次迭代中被更改.有人可以指出我做错了什么,或者将我链接到一个对我有用的网站吗?我已经阅读了一些这方面的教程,但到目前为止我还没有运气.

Jus*_*ave 18

  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;
Run Code Online (Sandbox Code Playgroud)

当然,由于您没有执行任何操作VR_UPDATE,因此执行此匿名块时不会显示任何内容.