Db2 SQL0107N名称“插入OH09ZC1.cte3,cte2(列表,cnt,cnt_max)为(选择)”太长。最大长度为“128”

Db2 SQL0107N名称“插入OH09ZC1.cte3,cte2(列表,cnt,cnt_max)为(选择)”太长。最大长度为“128”,db2,Db2,以下是我将语句与temp table一起使用的过程: 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

以下是我将语句与temp table一起使用的过程:

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;
这会给我一个表中列的列表。 问题是“将cte2列表、cnt、cnt_max AS插入OH09ZC1.cte3”不包含任何长名称,因此为什么会出现此错误: SQL0107N将名称插入到OH09ZC1.cte3中,cte2列表、cnt、cnt_max作为SELEC太长。最大长度为128。
当“insert into OH09ZC1.cte3”不存在时,我也遇到了同样的错误。

set stat=insert into…-SQL字符串文字应该使用单引号。双引号表示标识符,而insert into cte3…,除了对于标识符来说太长之外,还是无效的。

您使用的是什么RDBMS?@Rowland Shaw DB2v10.1.0.2太好了。我该如何处理语句中的单引号?明白了,在语句中使用两个单引号,而不是一个单引号。谢谢。