1

我想将表名设置为变量

为什么:我通过数据库链接从 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;

有人可以帮帮我吗?

提前致谢

4

2 回答 2

2

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

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

  • 使用动态 SQL(立即执行 / 为...打开游标)
  • 每天创建一个同义词,指向当前表,并在查询中使用该同义词
于 2012-11-27T15:35:52.537 回答
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;

当然,此版本假定您将单个字段中的单个列返回到变量中。很可能,您真的希望将 ref 游标返回给调用应用程序。

于 2012-11-27T15:39:05.767 回答