暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 表单-复选框验证

askTom 2017-07-24
271

问题描述

我正在使用Oracle表格10g。有一个由复选框CB_A和其他字段组成的多块。

我希望能够防止用户保存事务,如果有超过1条记录的复选框CB_A勾选。

我已经使用GO_BLOCK编写了一个过程来获取复选框CB_A的记录计数,因此在该块上的预更新和预插入触发器中使用了此过程。我收到错误: FRM-40737: 更新前触发器中的非法受限过程GO_BLOCK...

我迫切需要解决这个问题。

如果有人可以请您告知如何进行,我们深表感谢。

依靠你的专业知识。

事先感谢你。

亲切的问候,

普里西拉。


专家解答

这里有几个选择

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论