Oracle SQL вставить столбец в переменную - PullRequest
0 голосов
/ 16 июня 2020

Заранее я только начинаю в 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

1 Ответ

1 голос
/ 16 июня 2020

Хм, похоже, вы хотите объединить адреса электронной почты. Это так? Если ДА, то:

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;
...