我在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;
答案 0 :(得分:3)
使用pl / sql关联数组存储已处理的值。
declare
type t_processed is table of number(1) index by varchar2(100);
v_product_no varchar2(100); --hold the current value
v_products t_processed; --hold all processed values as keys
begin
v_product_no := :detail_block.product_no;
v_products(v_product_no) := 1; --create entry (v_product_no, 1)
...
--later in while
v_product_no := :detail_block.product_no;
if(v_products.exists(v_product_no)) then --entry exists
-- other conditions
else
v_products(v_product_no) := 1; --create entry (v_product_no, 1)
end if;
...
答案 1 :(得分:1)
我认为你在 v_product_no
变量中有Varying IN list of values。
你可以通过以下方式完成,
测试#1
SQL> var product_no VARCHAR2(1000)
SQL> exec :product_no := 'K1BATTERY'
PL/SQL procedure successfully completed.
SQL>
SQL> SET SERVEROUTPUT ON
SQL>
SQL> DECLARE
2 v_product_no VARCHAR2(1000);
3 BEGIN
4 v_product_no := 'K1BATTERY, K2BATTERY, ZCATBATEERY';
5 IF :product_no IN (trim(regexp_substr(v_product_no, '[^,]+'))) THEN
6 DBMS_OUTPUT.PUT_LINE('FOUND A MATCH');
7 ELSE
8 DBMS_OUTPUT.PUT_LINE('NO MATCH FOUND');
9 END IF;
10 END;
11 /
FOUND A MATCH
PL/SQL procedure successfully completed.
测试#2
SQL> var product_no VARCHAR2(1000)
SQL> exec :product_no := 'ABCD'
PL/SQL procedure successfully completed.
SQL>
SQL> SET SERVEROUTPUT ON
SQL>
SQL> DECLARE
2 v_product_no VARCHAR2(1000);
3 BEGIN
4 v_product_no := 'K1BATTERY, K2BATTERY, ZCATBATEERY';
5 IF :product_no IN (trim(regexp_substr(v_product_no, '[^,]+'))) THEN
6 DBMS_OUTPUT.PUT_LINE('FOUND A MATCH');
7 ELSE
8 DBMS_OUTPUT.PUT_LINE('NO MATCH FOUND');
9 END IF;
10 END;
11 /
NO MATCH FOUND
PL/SQL procedure successfully completed.
SQL>