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

问题描述 投票:-2回答:2

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

但它不起作用。

oracle oracleforms
2个回答
0
投票

你把代码放在哪里了?应该是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;

0
投票

您可以通过向块添加查询后触发器来实现此目的。如果计数返回的元素超过5个,只需更改项目的ENABLE属性即可禁用它,否则启用它。

要在插入新记录之前显示您的消息,您还可以在块上使用“预插入”触发器并检查计数结果,然后显示您的消息:

IF EL_COUNT > 5 THEN
 Message('Sorry, Can Not Entry More Than 5 Chemist...');
 RAISE Form_trigger_Failure;
END IF;
© www.soinside.com 2019 - 2024. All rights reserved.