开发者社区 > 数据库 > 数据仓库 > 正文

你好,ADB中在使用自定义变量拼接动态sql语句的时候,循环赋值,concat不支持对变量本身循环?

你好,ADB中在使用自定义变量拼接动态sql语句的时候,循环赋值,concat不支持对变量本身循环拼接,这怎么解决啊?就用户变量啊,是这个意思,不错用的是select into

展开
收起
真的很搞笑 2023-05-23 20:58:18 190 0
2 条回答
写回答
取消 提交回答
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    对于 ADB 中的自定义变量,您可以使用 STORED PROCEDURE 或函数来实现动态 SQL 语句的拼接,具体操作步骤如下:

    1. 创建存储过程或函数,并定义输入和输出参数,如下所示:
    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;
    
    1. 在存储过程或函数中使用 CONCAT_WS 函数进行变量拼接,同时可以使用 WHILE 循环将查询条件或变量值进行拼接。

    2. 调用存储过程或函数,并传入输入参数,如下所示:

    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 语句的拼接,因此需要使用存储过程或函数来实现。

    2023-05-23 22:39:13
    赞同 展开评论 打赏
  • adb目前还不支持在SQL里设置变量,这里指的自定义变量是什么呢,这里指的用户变量是SET @var_name = expr [, @var_name = expr] ,这个意思吗,这个目前adb不支持的抱歉,此回答整理自钉群“云数据仓库ADB-开发者群”

    2023-05-23 21:05:45
    赞同 展开评论 打赏

阿里云自主研发的云原生数据仓库,具有高并发读写、低峰谷读写、弹性扩展、安全可靠等特性,可支持PB级别数据存储,可广泛应用于BI、机器学习、实时分析、数据挖掘等场景。包含AnalyticDB MySQL版、AnalyticDB PostgreSQL 版。

相关产品

  • 云原生数据仓库 AnalyticDB PostgreSQL版
  • 相关电子书

    更多
    SQL Server 2017 立即下载
    GeoMesa on Spark SQL 立即下载
    原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载