Plsql 检查记录是否存在,是否添加1(过程内部)

Plsql 检查记录是否存在,是否添加1(过程内部),plsql,oracle-sqldeveloper,Plsql,Oracle Sqldeveloper,我试图检查电子邮件地址是否已经存在,如果已经存在,则添加1(如果电子邮件+1存在,则添加1,以此类推)。但到目前为止,我甚至不知道如何在一个过程中检查它是否存在 if exists (select 1 from table where email='something') then ... 返回错误(“函数或伪列“EXISTS”只能在SQL语句中使用)”。也尝试过其他东西,但这些可能不值得一提 完成此操作后,我计划创建一个while循环,根据需要添加1。您可以选择变量(您已声明)中的匹配记录数

我试图检查电子邮件地址是否已经存在,如果已经存在,则添加1(如果电子邮件+1存在,则添加1,以此类推)。但到目前为止,我甚至不知道如何在一个过程中检查它是否存在

if exists (select 1 from table where email='something') then ...
返回错误(“函数或伪列“EXISTS”只能在SQL语句中使用)”。也尝试过其他东西,但这些可能不值得一提


完成此操作后,我计划创建一个while循环,根据需要添加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;
选择。。。into
始终必须准确地返回一条记录,使用
count
聚合函数意味着即使存在多条匹配记录,也会发生这种情况

希望这涵盖了关于检查存在性的具体问题。至于您的基本目标,听起来好像您试图通过增加后缀来查找未使用的值。如果是的话,也许会有帮助。这是寻找用户名而不是电子邮件,但原则是一样的


正如注释中指出的,对过程的同时调用可能仍然尝试使用相同的后缀值;因此,您仍然需要一个唯一的约束,并处理在该场景中被违反的约束。不过,我认为这超出了你在这里提出的问题。

@Saeq-很高兴它有所帮助;检查我的编辑,看看链接的问题是否有助于你的总体目标。通过添加
rownum=1
条件,可以稍微优化它。虽然我假设在这种情况下不需要重复;我只是在最后一分钟将
=1
更改为
>0
,以防万一*8-)考虑到OP在对其问题的评论中解释的用例,如果您同时插入同一封电子邮件,该行为如何?难道我们不能用相同的后缀插入两次电子邮件吗?同样正确,但就像我说的,我是在处理具体的存在问题。整个过程仍然需要一个独特的检查和处理被同时呼叫破坏的情况。我可能不是很具体,只需在电子邮件末尾添加1,例如bunny->bunny1。