SAP HANA存储过程中STRING_AGG结果赋值变量报错排查
SAP HANA存储过程赋值报错排查与修正
报错原因分析
你遇到的错误源于两个语法问题:
- 标量变量赋值语法错误:SQLScript中给
COLS1这类单值标量变量赋值查询结果时,不能直接用变量 := SELECT ...的形式,必须使用SELECT ... INTO 变量的语法,或是将查询作为子句包裹在括号中完成赋值。 - 本地表变量引用错误:你声明的本地表变量
TAB1属于SQLScript本地对象,在FROM子句中直接写表名即可,不需要加冒号(冒号仅用于绑定输入参数或标量变量)。
修正后的存储过程代码
CREATE procedure TAB_COMP (IN T1 VARCHAR(30), IN T2 VARCHAR(30)) LANGUAGE SQLSCRIPT SQL SECURITY INVOKER AS BEGIN DECLARE TAB1 TABLE (COLUMN_NAME VARCHAR(500)); DECLARE TAB2 TABLE (COLUMN_NAME VARCHAR(500)); DECLARE COLS1 VARCHAR(500); DECLARE COLS2 VARCHAR(500); TAB1 = SELECT COLUMN_NAME FROM TABLE_COLUMNS WHERE TABLE_NAME= :T1 ORDER BY POSITION; TAB2 = SELECT COLUMN_NAME FROM TABLE_COLUMNS WHERE TABLE_NAME= :T2 ORDER BY POSITION; -- 方式1:使用INTO语法完成赋值 SELECT STRING_AGG(COLUMN_NAME,',') INTO COLS1 FROM TAB1; -- 方式2:子查询形式赋值(两种方式二选一即可) -- COLS1 := (SELECT STRING_AGG(COLUMN_NAME,',') FROM TAB1); END
补充提示
- 两种赋值方式效果一致,任选其一即可。
- 如果拼接后的列名字符串可能超过500长度,建议适当调大
COLS1和COLS2的声明长度,避免出现字符串截断问题。
内容的提问来源于stack exchange,提问作者TrenT
相关产品推荐
相关产品推荐

