你好,ADB中在使用自定义变量拼接动态sql语句的时候,循环赋值,concat不支持对变量本身循环拼接,这怎么解决啊?就用户变量啊,是这个意思,不错用的是select into
对于 ADB 中的自定义变量,您可以使用 STORED PROCEDURE 或函数来实现动态 SQL 语句的拼接,具体操作步骤如下:
CREATE PROCEDURE proc_test(IN p_id INT, OUT p_result VARCHAR(1024))
BEGIN
DECLARE v_sql VARCHAR(1024);
DECLARE v_tmp VARCHAR(50);
SET v_sql = 'SELECT ';
SET v_tmp = '';
WHILE p_id > 0 DO
SET v_sql = CONCAT_WS(',', v_sql, v_tmp, p_id);
SET v_tmp = CONCAT_WS('+', v_tmp, p_id);
SET p_id = p_id - 1;
END WHILE;
SET @v_sql = CONCAT_WS(' ', v_sql, 'FROM dual');
SET p_result = @v_sql;
END;
在存储过程或函数中使用 CONCAT_WS 函数进行变量拼接,同时可以使用 WHILE 循环将查询条件或变量值进行拼接。
调用存储过程或函数,并传入输入参数,如下所示:
SET @p_result = '';
CALL proc_test(10, @p_result);
SELECT @p_result;
上述示例中,proc_test
存储过程中使用了 WHILE 循环将查询条件进行拼接,并将结果存储到 v_sql
变量中。然后使用 CONCAT_WS
函数进行变量拼接,并将结果存储到输出参数 p_result
中。在调用存储过程时,传入输入参数 10
,并初始化输出参数 @p_result = ''
,最后通过 SELECT
语句输出结果。
在 ADB 中,自定义变量需要使用 @
符号进行初始化和引用,因此在存储过程或函数中需要使用 SET @variable = value
来初始化和赋值。同时,ADB 不支持动态 SQL 语句的拼接,因此需要使用存储过程或函数来实现。
adb目前还不支持在SQL里设置变量,这里指的自定义变量是什么呢,这里指的用户变量是SET @var_name = expr [, @var_name = expr] ,这个意思吗,这个目前adb不支持的抱歉,此回答整理自钉群“云数据仓库ADB-开发者群”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云自主研发的云原生数据仓库,具有高并发读写、低峰谷读写、弹性扩展、安全可靠等特性,可支持PB级别数据存储,可广泛应用于BI、机器学习、实时分析、数据挖掘等场景。包含AnalyticDB MySQL版、AnalyticDB PostgreSQL 版。