检查记录是不是存在,如果它确实加 1(在过程中)
Posted
技术标签:
【中文标题】检查记录是不是存在,如果它确实加 1(在过程中)【英文标题】:Check if record exists, if it does add 1 (inside procedure)检查记录是否存在,如果它确实加 1(在过程中) 【发布时间】:2015-05-09 17:47:20 【问题描述】:我正在尝试检查电子邮件地址是否已经存在,如果存在则添加 1(如果即使存在电子邮件+1 则添加 1,依此类推)。但到目前为止,我什至无法弄清楚如何在一个过程中检查它是否存在。
if exists (select 1 from table where email='something') then ...
返回错误(“函数或伪列 'EXISTS' 只能在 SQL 语句中使用)”。也尝试了其他东西,但那些可能不值得一提。
完成此操作后,我计划创建一个 while 循环,以便根据需要添加 1。
【问题讨论】:
我可能不是很具体,只是在邮件末尾加1,例如bunny -> bunny1。 【参考方案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;
这有望涵盖您关于检查存在的具体问题。至于您的基本目标,听起来您正试图通过增加后缀来找到未使用的值。如果是这样,this similar question 可能会有所帮助。那是找用户名而不是邮箱,但原理是一样的。
正如 cmets 中所指出的,同时调用您的过程可能仍会尝试使用相同的后缀值;所以你仍然需要一个唯一的约束,并处理在那种情况下被违反的约束。不过,我认为这超出了您在这里所问的范围。
【讨论】:
@Saeq - 很高兴它有帮助;检查我的编辑,看看链接的问题是否有助于您的总体目标。 可以通过添加rownum = 1
条件进行一点优化。
是的,虽然我认为在这种情况下不会出现重复;我只是在最后一分钟将= 1
更改为> 0
,以防万一 *8-)
鉴于 OP 在对他的问题的评论中解释的用例,如果您有两个并发插入同一封电子邮件,它的行为如何?我们不能最终插入两次带有 same 后缀的电子邮件吗?
也是正确的,但就像我说的那样,我正在解决特定的存在问题。整个过程仍然需要对同时调用的违反进行独特的检查和处理。以上是关于检查记录是不是存在,如果它确实加 1(在过程中)的主要内容,如果未能解决你的问题,请参考以下文章