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;