2015-05-09 5 views
-1

Я пытаюсь проверить, существует ли уже существующий адрес электронной почты, и добавить 1, если он есть (и 1, если существует даже электронная почта + 1 и т. Д.). Но пока я не могу даже выяснить, как проверить, существует ли она внутри процедуры.Проверьте, существует ли запись, если она добавляет 1 (внутренняя процедура)

if exists (select 1 from table where email='something') then ... 

возвращает ошибку («функция или псевдо-столбец„EXISTS“может быть использован внутри SQL заявления только)». Пробовал и другие вещи, но это, возможно, не стоит упоминать.

После этого я планирую сделать цикл while для добавления 1 столько, сколько необходимо.

+0

_ "добавить 1" _ к чему? –

+0

Возможно, я не был очень конкретным, просто добавьте 1 до конца письма, например, bunny -> bunny1. – Saeq

ответ

1

Вы можете выбрать количество совпадающих записей в переменную (которую вы заявили), а затем проверить значение этой переменной:

select count(*) into l_count 
from my_table 
where email = 'something'; 
if l_count > 0 then 
    -- record exists 
    ... 
else 
    -- record does not exist 
    ... 
end if; 

select ... into всегда должен получить ровно одну запись назад, и с помощью count агрегированная функция означает, что это происходит, даже если существует более одной соответствующей записи.

Это, надеюсь, охватывает вашу конкретную проблему с проверкой на существование. Что касается вашей основной цели, похоже, вы пытаетесь найти неиспользуемое значение, увеличивая суффикс. Если да, то может помочь this similar question. Это ищет имена пользователей, а не электронные письма, но принцип тот же.

Как указано в комментариях, одновременные вызовы вашей процедуры могут по-прежнему пытаться использовать одно и то же значение суффикса; поэтому вам по-прежнему требуется уникальное ограничение, и обработка для этого нарушается в этом сценарии. Я думаю, что это далеко не то, о чем вы просили здесь.

+0

Спасибо :) Кажется, работает так! – Saeq

+0

@Saeq - рад, что это помогло; проверьте мое изменение, чтобы узнать, помогает ли связанный вопрос вашей общей цели. –

+1

Его можно немного оптимизировать, добавив условие «rownum = 1». –

Смежные вопросы