【问题标题】:Oracle SQL paste column into variableOracle SQL 将列粘贴到变量中
【发布时间】:2020-06-16 11:28:01
【问题描述】:

提前我刚刚开始使用 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

【问题讨论】:

  • 该代码远非有效的 PL/SQL

标签: oracle plsql oracle-sqldeveloper


【解决方案1】:

嗯,您似乎想要连接电子邮件地址。是这样吗?如果是,那么:

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;

【讨论】:

  • 非常感谢,我确实在尝试连接地址。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多