2016-11-10 13 views
0

新しいテーブルを作成して挿入する、DB2バージョン11.1.0のCTASステートメントを使用しようとしています。DB2 CTASトークンエラー

"my_error":"SQL Error: derived_table zero_to_3 creation failed: SQL Error in CREATE TABLE as SELECT: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=AS;RO_TO_3\" (\nWITH TWO;JOIN, DRIVER=4.16.53"

DB2 docsによると、エラーが原因で次のようである:私は次のエラー受け付けております、しかし

 CREATE TABLE MY_SCRATCH.LC$U7OB81478732948714_zero_to_3 AS (
     WITH two AS (SELECT id AS the_num FROM users WHERE id = 2) 
     , one_two AS (
     SELECT id AS the_num FROM users WHERE id = 1 
     UNION ALL 
     SELECT * FROM two tmp 
    ) 
     , zero_one_two AS (
     SELECT id-7 AS the_num FROM users where id = 7 
     UNION ALL 
     SELECT * FROM one_two tmp 

    ) 
     SELECT * FROM zero_one_two tmp 
     UNION ALL 
     SELECT id AS the_num FROM users WHERE id = 3 
    ) WITH DATA 

:クエリは以下の通りである

A syntax error was detected where the symbol "token" occurs in the SQL statement. The list of symbols that might be legal shows some alternate symbols that could possibly be correct at that point, if the preceding part of the statement is entirely correct.

をだから私RazorSQLで上記のクエリを実行し、同じエラーが発生しました。トークンの発行場所がわからない

+0

列名を含む期待されるテーブル構造は何ですか? –

答えて

2

共通テーブル式は使用できません。あなたは(下のグラフは、あなたの特定の質問のために簡略される)CREATE TABLEための構文を見れば:

>>-CREATE TABLE--table-name-------------------------------------> 

>--+-----------------------+--AS--(--fullselect--)--------------> 
    | .-,-----------. |       
    | V    | |       
    '-(----column-name-+--)-'       

>--+-WITH NO DATA-+---------------------------------------------| 
    '-WITH DATA----' 

fullselectは完全な選択クエリの一部であるが、それは共通テーブル式が含まれていません。共通テーブル式はselect-statementの一部です。

一般的なテーブル式の代わりにネストしたテーブル式を使用してクエリを書き直すことは可能かもしれませんが、例のクエリでは、実際には共通のテーブル式はまったく必要ないという点でこれを説明するのは難しいです。あなたのクエリは、より簡単な方法で書くことができます:

CREATE TABLE MY_SCRATCH.LC$U7OB81478732948714_zero_to_3 AS (
    select id as the_num from users where id = 2 
    union all 
    select id as the_num from users where id = 1 
    union all 
    select id-7 as the_num from users where id = 7 
    union all 
    select id as the_num from users where id = 3 
) 
    WITH DATA; 
+0

問題を修正したCTASでCTEのサポートを無効にできるフラグがシステム内にあるため、コードを使用して終了しませんでした – theGreenCabbage

関連する問題