【发布时间】:2015-04-23 08:35:53
【问题描述】:
我在 Oracle Forms 详细信息块中有以下代码
BEGIN
v_product_no := :detail_block.product_no;
Go_block('detail_block');
first_record;
--some if condition
WHILE :SYSTEM.last_record != 'TRUE' LOOP
next_record;
if(:detail_block.product_no = v_product_no) then
-- other condtions
end if;
END LOOP;
我想将v_product_no 存储到某种集合对象中,以便与:detail_block.product_no 的值进行比较。
我该怎么做?
编辑 1
product_no 将具有 K1BATTERY、K2BATTERY、ZCATBATEERY 等值。
因此,如果K1BATTERY 与:detail_block.product_no 相同,则继续下一个条件
编辑 2
Go_block('detail_block');
v_product_no := :detail_block.product_no;
v_products(v_product_no) := 1;
first_record;
WHILE :SYSTEM.last_record != 'TRUE' LOOP
if(v_products.exists(v_product_no)) then
alert('duplicate');
end if;
END LOOP;
END if;
编辑 3
Go_block('detail_block');
v_product_no := :detail_block.product_no;
v_products(v_product_no) := 1;
first_record;
-- condition
WHILE :SYSTEM.last_record = 'FALSE' LOOP
next_record;
v_product_no := :detail_block.product_no;
if(v_products.exists(v_product_no)) then
alert('duplicate');
else
v_products(v_product_no) := 1;
end if;
END LOOP;
END if;
【问题讨论】:
-
你真的需要一个集合对象吗?如果它是标量值,您可以创建一个包规范并让它存储该值。另外,为什么不将其存储到本地块变量中?
-
@Sathya 我的意图是如果
product_no被重复,那么我希望在同一个细节块中评估另一个 if 条件。将v_product_no存储在varchar2中无助于比较多记录块中的值。谢谢 -
您不需要集合类型来存储标量值。在本地声明另一个变量并赋值,它可以在会话范围内使用,因为它是一个局部变量。
-
@LalitKumarB 如果我声明为局部变量,如何将多记录块中的所有项目与当前记录的项目值进行比较?
-
也许不清楚。
:detail_block.product_no分配了什么样的值?请举个例子,我会尽力重现你想要的。
标签: oracle plsql oracleforms