Sql 在DB2存储过程中组合字符串

Sql 在DB2存储过程中组合字符串,sql,stored-procedures,db2,Sql,Stored Procedures,Db2,我想知道如何在存储过程中组合Varchar变量。我想根据访问级别将电子邮件地址合并为单个变量。我在if声明中尝试了一些事情 例如,我尝试了两种方法: v_m1_email = Concat(v_m1_email, ' , ' , v_email) 及 我的代码: CREATE PROCEDURE ALERTEMAIL (OUT p_m1_email VARCHAR(300), OUT p_m2_email VARCHAR(300),

我想知道如何在存储过程中组合
Varchar
变量。我想根据访问级别将电子邮件地址合并为单个变量。我在if声明中尝试了一些事情

例如,我尝试了两种方法:

v_m1_email = Concat(v_m1_email, ' , ' , v_email)

我的代码:

CREATE PROCEDURE ALERTEMAIL (OUT p_m1_email VARCHAR(300),
                         OUT p_m2_email VARCHAR(300),
                         OUT p_m3_email VARCHAR(300),
                         OUT p_m4_email VARCHAR(300))
DYNAMIC RESULT SETS 1
P1: BEGIN
DECLARE v_email VARCHAR(50);
DECLARE v_access CHAR(5);
DECLARE v_m1_email VARCHAR(300);
DECLARE v_m2_email VARCHAR(300);
DECLARE v_m3_email VARCHAR(300);
DECLARE v_m4_email VARCHAR(300);
DECLARE SQLSTATE CHAR(5);
DECLARE cursor1 CURSOR WITH RETURN for
    SELECT EMAIL,JOB_ID FROM PERSONNEL;

OPEN cursor1;
FETCH cursor1 INTO v_email, v_access;
WHILE (SQLSTATE = '00000') DO
    IF v_access = 'Man1' THEN
        SET v_m1_email = v_m1_email + ' , ' + v_email;
    ELSEIF v_access = 'Man2' THEN
        SET v_m2_email = v_m2_email + ' , ' + v_email;
    ELSEIF v_access = 'Man3' THEN
        SET v_m3_email = v_m3_email + ' , ' + v_email;
    ELSEIF v_access = 'Man4' THEN
        SET v_m4_email = v_m4_email + ' , ' + v_email;
    END IF;
FETCH cursor1 INTO v_email, v_access;
END WHILE;
SET p_m1_email = v_m1_email;
SET p_m2_email = v_m2_email;
SET p_m3_email = v_m3_email;
SET p_m4_email = v_m4_email;

END P1

字符串连接可以使用| |运算符完成

set vEmail = userName || '@' || domain || '.' || tld;

试一试。

关于已经在OP中尝试过的第一个内容,正如2016年4月23日的@I_am_蝙蝠侠所指出的那样,
CONCAT
scalar
>-CONCAT--(-expression1--,-expression2--)的语法你有什么问题?顺便说一下,
+
是一个算术运算符,它不适用于字符串。我想知道如何在存储过程中组合字符串。所提取的值是一个电子邮件地址,我希望列出一个列表。我期望的结果是email@email.com, email2@email.com. @mustaccioTry concat(联系方式(表达方式1’,’),表达方式2)。看起来concat一次只接受两个参数:等效的concat运算符避免使用[至少在某些EBCDIC]代码页上不同的字符;使用
CONCAT
代替
| |
的表达式的等价物是:
set-vEmail=userName-CONCAT'@“CONCAT-domain-CONCAT.”CONCAT-tld
set vEmail = userName || '@' || domain || '.' || tld;