拼接变量构造动态SQL报错:不支持非常量源表达式赋值
解决动态列名拼接SQL的报错问题
报错000002 (0A000): Unsupported feature 'assignment from non-constant source expression'是因为数据库不允许将动态生成的变量(如$columnNames)直接与字符串常量拼接后赋值给另一个变量。需要把列名查询和SQL文本拼接合并为一个单一查询,直接生成完整的SQL语句后赋值:
SET sqlText = ( SELECT 'SELECT ' || LISTAGG(a.column_name, ', ') || ' from myDB.MySchema.myTable1 where sold > 0 and hour = ''2022-08-01 13:00:00.000'' and id = ''zzzseee2323'' limit 10' FROM INFORMATION_SCHEMA.COLUMNS a INNER JOIN INFORMATION_SCHEMA.COLUMNS b ON a.column_name = b.column_name WHERE a.TABLE_NAME = 'myTable1' AND b.TABLE_NAME = 'myTable2' );
关键说明:
- 把原本分开的列名查询和SQL拼接逻辑合并,通过
LISTAGG直接将共同列名拼接成逗号分隔的字符串,再与固定SQL部分拼接成完整查询语句。 - 避免了先赋值列名变量再拼接的两步操作,绕过了数据库对非常量赋值的限制。
执行时依然使用:
EXECUTE IMMEDIATE $sqlText;
内容的提问来源于stack exchange,提问作者Hrvoje
相关产品推荐
相关产品推荐

