oracle - Oracle SQL 将列粘贴到变量中
问题描述
提前我刚刚开始使用 Oracle SQL,所以请多多包涵。所以我想将表中的一列粘贴到一个变量中,问题是我必须通过在每个条目后添加一个“,”来调整我的变量。以下是我实现这一目标的尝试。
DECLARE
email clob;
counter int;
set counter := 0;
BEGIN
WHILE counter < 500
LOOP
SELECT mail INTO email FROM spam
email += ","
DBMS_OUTPUT.PUT_LINE( 'Email : ' || email )
DBMS_OUTPUT.PUT_LINE( 'Counter : ' || counter )
SET @counter = @counter + 1
END LOOP
END
解决方案
嗯,看起来你想连接电子邮件地址。是这样吗?如果是,那么:
DECLARE
email VARCHAR2(32000);
BEGIN
FOR cur_r IN (SELECT mail
FROM spam
WHERE ROWNUM < 500
)
LOOP
email := email ||','|| cur_r.mail;
DBMS_OUTPUT.PUT_LINE(cur_r.mail);
END LOOP;
email := RTRIM(email, ',');
END;
- 而不是计数器,使用
ROWNUM
- 您不能真的期望显示整个字符串(即最终
email
值),因为它的长度限制为 255 个字符
或者,如果您不希望结果字符串长于 4000 个字符,您可以使用LISTAGG
:
DECLARE
email VARCHAR2(32000);
BEGIN
SELECT LISTAGG(mail, ',') WITHIN GROUP (ORDER BY mail)
INTO email
FROM spam
WHERE ROWNUM < 500;
END;
推荐阅读
- r - 为什么这段代码不能在 ggplot 中静态地获取 y 轴的百分比?
- android - Jetpack compose:设置 ImeAction 不会关闭或更改键盘的焦点
- flutter - Flutter Bloc 状态管理
- javascript - 需要帮助构建一个匹配字符串的正则表达式,前提是它的格式介于 1 到 5 个百分号 (%) 之间,可选用冒号 (:) 分隔?
- java - 项目文件夹已存在且不为空。在 Apache NetBeans 12.1 中
- android - 有没有办法使用生物识别传感器在 Android Studio 中显示您的指纹?
- c# - 如何计算在方法中执行某些操作所需的时间?
- python - 如何在 IIS 上查看调试日志烧瓶 App?
- javascript - 将 csv 文件数据转换为 JavaScript 字典
- node.js - 该命令移动到一个单独的包中:@webpack-cli/serve