sql - Oracle SQL : variables used in place of table names

标签 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;

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

最佳答案

  • 您需要在表名和后续的WHERE子句
  • 之间留一个空格
  • INTO必须是EXECUTE IMMEDIATE的一部分,而不是动态SQL语句的一部分。
  • 动态SQL语句不应包含尾部分号
  • 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做任何事情,因此当执行此匿名块时,将不会显示任何内容。

    关于sql - Oracle SQL : variables used in place of table names,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11622233/

    相关文章:

    regex - Oracle - PCRE 到 Oracle REGEX

    MULE(AnyPoint Studio) 中的 Oracle 数据源配置

    xml - 使用 PL/SQL 查看从 Oracle 函数返回的 SYS.XMLTYPE

    oracle - PL/SQL : How to detect which browser is being used?

    oracle - oracle中记录行号

    sql - 如何在 SQLITE3 中创建一对多?

    mysql - 将表名添加到列会返回未知列错误

    php - 登录功能坏了

    c# - SQL "IN"CLAUSE 性能问题

    sql - 如何动态地将列名传递给查询?