检查记录是否存在,如果它确实加 1(内部程序)

Check if record exists, if it does add 1 (inside procedure)

我正在尝试检查电子邮件地址是否已存在,如果存在则加 1(如果 email+1 存在则加 1,依此类推)。但到目前为止,我什至不知道如何在过程中检查它是否存在。

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

返回错误("function or pseudo-column 'EXISTS' may be used inside a SQL statement only)"。也尝试了其他东西,但那些可能不值得一提。

在我有了这个之后,我计划制作一个 while 循环以根据需要添加 1。

您可以select将匹配记录的数量放入一个变量(您已声明),然后检查该变量的值:

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 可能会有所帮助。那就是找用户名而不是邮箱,但是原理是一样的

正如评论中所指出的,同时调用您的过程可能仍会尝试使用相同的后缀值;所以你仍然需要一个唯一的约束,并处理在那种情况下被违反的约束。不过,我认为这超出了您在这里询问的范围。