Plsql 如何限制PL/SQL代码以相同的值对输入参数执行两次?

Plsql 如何限制PL/SQL代码以相同的值对输入参数执行两次?,plsql,Plsql,我想限制PL/SQL代码的重复执行。也就是说,我编写了一个PL/SQL代码,其中包含三个输入参数,即月、年和一个标志。我已使用以下参数值执行该过程: 月份:3月 年份:2011年 国旗:Y 现在,如果我试图使用与上面相同的参数值执行过程,我想在PL/SQL中编写一些代码来限制不需要的第二次执行。有人能帮忙吗。我希望这个问题不会含糊不清。我将创建另一个表来存储每个请求的3个参数。当调用您的过程时,它将首先检查“parameter request”表,查看调用参数之前是否使用过。如果找到,则退出该过

我想限制PL/SQL代码的重复执行。也就是说,我编写了一个PL/SQL代码,其中包含三个输入参数,即月、年和一个标志。我已使用以下参数值执行该过程: 月份:3月 年份:2011年 国旗:Y


现在,如果我试图使用与上面相同的参数值执行过程,我想在PL/SQL中编写一些代码来限制不需要的第二次执行。有人能帮忙吗。我希望这个问题不会含糊不清。

我将创建另一个表来存储每个请求的3个参数。当调用您的过程时,它将首先检查“parameter request”表,查看调用参数之前是否使用过。如果找到,则退出该过程。如果未找到,则保存参数并执行过程的其余部分。

您需要将上次调用的“状态”保留在某个位置。我建议创建一个带有datetime列的表


当您的过程被调用时,请更新此表。所以,下次调用您的过程时。。检查此表以查看上一次调用您的过程是什么时候,然后继续相应的操作。

为什么不设置一个表来跟踪您已使用哪些参数执行它

在您的过程中,首先检查该表,查看是否已经处理了类似的参数。如果是,退出(有或没有错误)

如果没有,请插入它们并进行必要的处理

根据需求的严格程度,您需要在该表上获得独占锁以防止并发执行

一个不错的加号是一个额外的列,列中有“进行中”/“完成”/“错误”状态,这样您就可以检查事情是否正常进行。(如果重要/有趣的话,也可以加上时间戳。)


如果您发现出于任何原因需要重新执行某些操作,此设置允许您轻松清除某些执行(通过删除某些行)。

您可以使用函数result cache:。所以Oracle可以为您做这件事

在过程的开头插入一个insert,然后执行select for update以锁定表,这样其他人就不能处理任何数据。如果过程一切正常,提交并释放表Close,但不是完全关闭:如果两个会话只是同时查询表,它们都看不到行,并且会很高兴地插入它。您需要对这三列具有唯一约束,然后尝试插入,如果插入引发唯一约束冲突异常,则停止。