我有桌子DOC_CUST_PRODUCT (DOC_CODE, CUST_CODE, P_CODE)
当DOC_CODE
具有超过5个不同的CUST_CODE
时,我想限制插入并显示消息
SELECT COUNT(DISTINCT CUST_CODE)
INTO Y
FROM BP_DOC_CUST_PRODUCT
WHERE DOC_CODE = :DOC_CODE;
IF NVL(Y,0) > 4 THEN
MESSAGE('Sorry, Can Not Entry More Than 5 Chemist...');
MESSAGE('Sorry, Can Not Entry More Than 5 Chemist...');
但它不起作用。
答案 0 :(得分:0)
您将代码放在哪里?应该是WHEN-VALIDATE-ITEM
个项目上的DOC_CODE
触发器。
如果有两个(或多个)名为DOC_CODE
的项目,则Forms不知道您要引用的项目-我建议您始终使用项目名称指定块名称。
您发布的代码不完整-缺少变量声明,IF
没有END IF
。我不知道您是否真的没有这样做,或者您只是没有张贴您编写的所有内容(顺便说一句,我们应该怎么知道?)。
COUNT
函数无法返回NULL
,因此将NVL
应用于变量Y
是多余的。
下面的代码应该是可以的(如果您解决了丢失的内容-块名称)。
-- WHEN-VALIDATE-ITEM trigger on :BLOCK_NAME.DOC_CODE item
declare
l_count number;
begin
select count(distinct b.cust_code)
into l_count
from bp_doc_cust_product b
where b.doc_code = :block_name.doc_code;
if l_count = 5 then
message('Sorry, ...');
message('Sorry, ...');
end if;
end;
答案 1 :(得分:0)
您可以通过在块中添加查询后触发器来实现。如果计数返回的元素超过5个,则只需更改项目的ENABLE属性即可将其禁用,否则请启用它。
要在插入新记录之前显示消息,您还可以在块上使用“预插入”触发器并检查计数结果,然后显示消息:
IF EL_COUNT > 5 THEN
Message('Sorry, Can Not Entry More Than 5 Chemist...');
RAISE Form_trigger_Failure;
END IF;