首页 > 解决方案 > 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

标签: oracleplsqloracle-sqldeveloper

解决方案


嗯,看起来你想连接电子邮件地址。是这样吗?如果是,那么:

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;

推荐阅读