问题描述
我正在使用Oracle表格10g。有一个由复选框CB_A和其他字段组成的多块。
我希望能够防止用户保存事务,如果有超过1条记录的复选框CB_A勾选。
我已经使用GO_BLOCK编写了一个过程来获取复选框CB_A的记录计数,因此在该块上的预更新和预插入触发器中使用了此过程。我收到错误: FRM-40737: 更新前触发器中的非法受限过程GO_BLOCK...
我迫切需要解决这个问题。
如果有人可以请您告知如何进行,我们深表感谢。
依靠你的专业知识。
事先感谢你。
亲切的问候,
普里西拉。
我希望能够防止用户保存事务,如果有超过1条记录的复选框CB_A勾选。
我已经使用GO_BLOCK编写了一个过程来获取复选框CB_A的记录计数,因此在该块上的预更新和预插入触发器中使用了此过程。我收到错误: FRM-40737: 更新前触发器中的非法受限过程GO_BLOCK...
我迫切需要解决这个问题。
如果有人可以请您告知如何进行,我们深表感谢。
依靠你的专业知识。
事先感谢你。
亲切的问候,
普里西拉。
专家解答
这里有几个选择
1) 记住并推迟
在许多情况下,为了克服FRM-40737,我们记住我们 “想要” 做什么,然后在离开限制性触发器后不久就去做。例如,当-validate-item受到限制 (我不能做一个go_block/go_item/等),所以我可能会做类似的事情:
2) 将复选框项视为 “唯一项”,并使用以下技术
http://sheikyerbouti.developpez.com/duplicates/duplicates.htm
这里的例子是关于阻止某人两次输入相同的键值。在您的情况下,复选框项将返回 (例如1和null),因此您可以检查多个 “1”,就好像1是唯一值一样。
1) 记住并推迟
在许多情况下,为了克服FRM-40737,我们记住我们 “想要” 做什么,然后在离开限制性触发器后不久就去做。例如,当-validate-item受到限制 (我不能做一个go_block/go_item/等),所以我可能会做类似的事情:
when-validate-item: :global.more_work_required := 'Y'; :global.item_name := 'X'; when-new-item-instance (block level): if :global.more_work_required = 'Y' then if :global.item_name = 'X' then go_block('blah'); other_stuff; elseif ... end if; :global.more_work_required = 'N';
2) 将复选框项视为 “唯一项”,并使用以下技术
http://sheikyerbouti.developpez.com/duplicates/duplicates.htm
这里的例子是关于阻止某人两次输入相同的键值。在您的情况下,复选框项将返回 (例如1和null),因此您可以检查多个 “1”,就好像1是唯一值一样。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。