如何在Oracle Forms 6i中将条件应用于插入数据

时间:2018-07-29 07:52:39

标签: oracle oracleforms

我有桌子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...');

但它不起作用。

2 个答案:

答案 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;