检查记录是否存在,如果它确实加 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 可能会有所帮助。那就是找用户名而不是邮箱,但是原理是一样的
正如评论中所指出的,同时调用您的过程可能仍会尝试使用相同的后缀值;所以你仍然需要一个唯一的约束,并处理在那种情况下被违反的约束。不过,我认为这超出了您在这里询问的范围。
我正在尝试检查电子邮件地址是否已存在,如果存在则加 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 可能会有所帮助。那就是找用户名而不是邮箱,但是原理是一样的
正如评论中所指出的,同时调用您的过程可能仍会尝试使用相同的后缀值;所以你仍然需要一个唯一的约束,并处理在那种情况下被违反的约束。不过,我认为这超出了您在这里询问的范围。