【发布时间】:2020-05-08 23:06:22
【问题描述】:
我有一个 PL/SQL 过程,它有几个提示,要求用户输入一些信息进行处理。例如,项目编号、业务单位等。
这也会在脚本末尾提示确认。
这允许多个用户依赖同一个脚本来大量设置数据以进行测试(项目等......)。但是,肯定有一些粗心的用户会让 COMMIT 确认提示保持打开状态,从而锁定记录并阻止其他用户工作。
当我们访问已锁定记录的用户时(我们只能在 DBA 团队的帮助下识别他们,这需要花费大量时间),我们会要求他们关闭标签,并且它总是显示:
有没有办法在特定时间间隔过去时强制超时(通过相同的 SQL 脚本),这会调用我的 WHENEVER SQLERROR 处理程序进行自动回滚?
【问题讨论】:
-
此时如何锁定任何东西?您的应用程序只是提示输入变量。为什么你认为会有锁?请出示。
-
在执行任何 DML 操作之前,您需要在程序开始时获取替换值,因此在获取替换变量的输入之前不会锁定任何内容
-
PL/SQL 完全在数据库中运行,没有“提示输入”的能力。在我看来,您好像是从 Toad 调用该过程。将是 Toad 正在执行提示,并且它会根据程序的规范执行此操作,甚至在调用程序之前。因此,等待响应时不会发生锁定。
-
我没有检索锁列表的权限,但是当他们执行查询(通常不是这个)并且他们没有提交时,它会锁定记录。我正在添加我们识别某人未完成交易的一种方式。我想我错过了提交或回滚的提示,我需要为其设置超时。
-
这完全是TOAD的一个功能。为什么不用其他输入参数预先要求提交提示变量?