2013-09-25 53 views
0

這裏是我用一個語句臨時表的過程:SQL0107N名稱「插入OH09ZC1.cte3與CTE2(列表,CNT,cnt_max)AS(SELECT」太長的最大長度爲「128」

CREATE OR REPLACE PROCEDURE dept_query (
    p_table  CHAR(10), 
    p_date   CHAR(10), 
p_start  CHAR(6) 
) 
    LANGUAGE SQL 

BEGIN 
DECLARE  v_table   VARCHAR(128); 
DECLARE  v_colname  VARCHAR(128); 
DECLARE  v_month   CHAR(6); 
DECLARE  v_int   integer default 0; 
DECLARE  stat  VARCHAR(1000); 
DECLARE stmt STATEMENT; 
....... 
set stat = 'insert into cte1 select colname, row_number() over() as row_nbr from syscat.columns where tabname = ?'; 
PREPARE stmt FROM stat; 
execute stmt using p_table; 

set stat = "insert into OH09ZC1.cte3 -- cte, cte1 & cte3 are ordinary tables 
    with cte2 (list, cnt, cnt_max) AS 
    (SELECT VARCHAR('', 32000), 0, count(colname) FROM OH09ZC1.cte1 
    UNION ALL 
    SELECT 
     case when cte2.list = '' THEN RTRIM(CHAR(cte1.colname)) 
       else cte2.list || ', ' || RTRIM(CHAR(cte1.colname)) end, 
       cte2.cnt + 1, 
       cte2.cnt_max 
    FROM OH09ZC1.cte1, cte2 
    WHERE cte1.row_nbr = cte2.cnt + 1 AND cte2.cnt < cte2.cnt_max) 

select list FROM cte2 where cte2.cnt = cte2.cnt_max fetch first 1 rows only"; 

PREPARE stmt FROM stat; 
execute stmt; 
...... 
END; 

這讓我列的列表在表中。 的問題是,「插入OH09ZC1.cte3與CTE2(列表,CNT,cnt_max)AS」不包含任何長的名字,爲什麼我得到這個錯誤:。 SQL0107N名稱是太長「與CTE2(列表,CNT,cnt_max)AS(SELEC插入OH09ZC1.cte3」的最大長度爲「128」 我的時候也得到了同樣的錯誤插入OH09ZC1.cte3'不存在。

+0

您正在使用什麼RDBMS? –

+0

@Rowland肖DB2 v10.1.0.2 – user2815022

回答

1

set stat = "insert into... - SQL字符串常量應該使用單引號。雙引號表示標識符,並且"insert into cte3 ...",除了是太長的標識符,是無效的反正。

+0

大。我該如何處理陳述中的單引號? – user2815022

+0

得到它,使用2個單引號,而不是一個語句中的引號。謝謝。 – user2815022