我有桌子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...');
但它不起作用。
你把代码放在哪里了?应该是WHEN-VALIDATE-ITEM
触发DOC_CODE
项目。
如果有两个(或更多)名为DOC_CODE
的项目,则表单不知道您正在引用哪个项目 - 我建议您始终使用项目名称指定块名称。
您发布的代码不完整 - 缺少变量声明,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;
您可以通过向块添加查询后触发器来实现此目的。如果计数返回的元素超过5个,只需更改项目的ENABLE属性即可禁用它,否则启用它。
要在插入新记录之前显示您的消息,您还可以在块上使用“预插入”触发器并检查计数结果,然后显示您的消息:
IF EL_COUNT > 5 THEN
Message('Sorry, Can Not Entry More Than 5 Chemist...');
RAISE Form_trigger_Failure;
END IF;