8

DB2で次のTSQLクエリを実行するにはどうすればよいですか?クエリの結果に基づいて一時テーブルを作成する際に問題が発生しました。

SELECT 
COLUMN_1, COLUMN_2, COLUMN_3
INTO #TEMP_A
FROM TABLE_A
WHERE COLUMN_1 = 1 AND COLUMN_2 = 2

エラーメッセージは次のとおりです。

"エラー:SQL0104N""の後に予期しないトークン"#TEMP_A "が見つかりました。予期されるトークンには次のものが含まれる可能性があります:":"。SQLSTATE= 42601"

4

3 に答える 3

15

使用する前に、DB2で一時テーブルを宣言する必要があります。実行しているのと同じクエリを使用する場合:

DECLARE GLOBAL TEMPORARY TABLE SESSION.YOUR_TEMP_TABLE_NAME AS (
    SELECT COLUMN_1, COLUMN_2, COLUMN_3
    FROM TABLE_A
) DEFINITION ONLY

または、「手動で」列を定義します。

DECLARE GLOBAL TEMPORARY TABLE SESSION.YOUR_TEMP_TABLE_NAME (
     COLUMN_1 CHAR(10)
    ,COLUMN_2 TIMESTAMP
    ,COLUMN_3 INTEGER
) 

次に、それを入力します。

INSERT INTO SESSION.YOUR_TEMP_TABLE_NAME
SELECT COLUMN_1, COLUMN_2, COLUMN_3
FROM TABLE_A
WHERE COLUMN_1 = 1
  AND COLUMN_2 = 2

SQLServerほど簡単ではありません。:)

また、「グローバル」一時テーブルと呼ばれていても、現在のセッションにのみ存在します。SESSIONすべての一時テーブルの前にスキーマを付ける必要があることに注意してください。スキーマ名を指定しない場合は、SESSION暗黙的に示されます。

于 2012-07-11T06:19:39.823 に答える
3

たぶん「with」句はあなたが探しているものです:

with TEMP_A as (
  SELECT COLUMN_1, COLUMN_2, COLUMN_3
  FROM TABLE_A
  WHERE COLUMN_1 = 1 AND COLUMN_2 = 2
)
-- now use TEMP_A
select * from TEMP_A
于 2014-02-24T10:03:41.787 に答える
-5

結局のところ、一時テーブルを作成する権限がありませんでした。

于 2018-04-23T15:47:43.310 に答える