SQL使用变量作为表名

时间:2012-11-27 15:22:42

标签: sql oracle

我想将Tablename设置为Variable

为什么:我通过数据库链接从oracle数据库转到mysql数据库,在mysql数据库中我有一些表名,其中包含日期示例:data_20121126

这是我的陈述:

DECLARE
   tbname   VARCHAR2 (200);
BEGIN
   SELECT   ab.teste
     INTO   tbname
     FROM   (SELECT   '"data_'
                      || REPLACE (TO_CHAR (SYSDATE - 1, 'yyyy.mm.dd'),
                                  '.',
                                  '')
                      || '"@myDB'
                         AS teste
               FROM   DUAL) ab;
   SELECT   * FROM tbname;
END;

有人能帮帮我吗?

提前致谢

2 个答案:

答案 0 :(得分:2)

静态SQL是不可能的(我怀疑在MySQL数据库中每天创建一个新表是一种明智的设计方法)。

如果你真的需要这样做,你可以

  • 使用动态SQL(EXECUTE IMMEDIATE / OPEN CURSOR FOR ...)
  • 每天创建一个同义词,指向当前表,并在查询中使用该同义词

答案 1 :(得分:0)

如果不使用动态SQL,就无法做到这一点:

DECLARE
   tbname   VARCHAR2 (200) := '"data_' 
                              || TO_CHAR (SYSDATE - 1, 'yyyymmdd')
                              || '"@myDB';
   vMyVariable varchar2(10);
BEGIN
   execute immediate "SELECT MyColumn
                      FROM " || tbname into vMyVariable ;
END;

当然,此版本假设您将从单个字段返回单个列到变量。很可能,你真的想要将一个引用光标返回给你的调用应用程序。