1

テーブル名を変数として設定したい

理由: 私は db リンクを介して oracle db から mysql db に移動し、mysql db には日付を含むいくつかのテーブル名があります-例: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 を使用する (EXECUTE IMMEDIATE / OPEN CURSOR FOR ...)
  • 1 日に 1 回、現在のテーブルを指すシノニムを作成し、そのシノニムをクエリで使用する
于 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 に答える