Проблема конкатенации Oracle - PullRequest
1 голос
/ 17 января 2012
SELECT
  tbl1.PYU_EMAIL,
  COUNT(tbl1.PYU_EMAIL) as TOTAL,
  ( SELECT ROWCONCAT( 'SELECT pyu_id FROM p_survey_invite WHERE pyu_email=' || tbl1.pyu_email ) FROM dual )
FROM p_survey_invite tbl1
GROUP BY tbl1.pyu_id, tbl1.pyu_email
ORDER BY total DESC;

привет всем,

Я продолжаю получать ORA-04054: ссылка на базу данных DIGITALVIDEOSYSTEMS.NET не существует, ошибка

Я подозреваю, что когда я объединяю tbl1.pyu_email в функции rowconcat, в tbl1.pyu_email есть @ char, что отражается в DB-LINK в oracle.

Как мне сказать, что оракул не думает, что @ это ссылка на БД?

1 Ответ

4 голосов
/ 17 января 2012

Вы должны поместить цитаты вокруг вашего адреса электронной почты:

SELECT
  tbl1.PYU_EMAIL,
  COUNT(tbl1.PYU_EMAIL) as TOTAL,
  ( SELECT ROWCONCAT( 'SELECT pyu_id FROM p_survey_invite WHERE pyu_email=''' || tbl1.pyu_email ||'''') FROM dual )
FROM p_survey_invite tbl1
GROUP BY tbl1.pyu_id, tbl1.pyu_email
ORDER BY total DESC;

Вы передаете строку в функцию ROWCONCAT (), которая динамически выполняет эту строку. Ваш код объединяет столбец varchar2 со строкой DML. Если вы не включите в строку экранированные кавычки, то, что вы передаете (и функция пытается выполнить), выглядит примерно так:

SELECT pyu_id FROM p_survey_invite WHERE pyu_email=gumpi@example.com

И вот почему это терпит неудачу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...