Oracle Apex验证-有效的产品名称



我在这里有一个验证初学者的问题:

我有一个选择列表项,选项:产品SKU

如果用户选择SKU选项,则会显示一个新的文本字段Item,供客户记下SKU编号。然后,我的验证会尝试阻止插入无效的SKU。这就是我目前所拥有的:

declare 
v_rows_approved_min number;
v_rows_approved_max number;
err varchar2(300);
begin
if :P8_PRODUCT_OR_SKU = 'SKU' -- THIS IS MY SELECT LIST ITEM
then
err := 'Not a valid SKU';
v_rows_approved_min := 1;
select count(*) into v_rows_approved_max from SKU_TABLE;
for cur_a in (select SKU from SKU_TABLE) 
loop
exit when v_rows_approved_min > v_rows_approved_max;
if :P8_SKU = cur_a.SKU
then return err;
else null;
end if;
v_rows_approved_min := v_rows_approved_min + 1;
end loop;
else null;
end if;
end;

不知道这里发生了什么,有人能帮忙吗?

谢谢!

此代码过于复杂。它检查表中是否存在页面项值,如果找到匹配项,则返回错误。这是通过一个带有一些额外逻辑的循环来完成的,以在迭代次数达到选择计数时退出循环。最后一个逻辑是不需要的。如果一个表包含5行,那么循环将有5次迭代。无需从表(v_rows_approved_max(中执行SELECT count,然后检查每个迭代(如果尚未达到该数字(。。。

此外,如果发现不匹配,就没有RETURN语句,所以它被添加到末尾。

这里有一个重写的尝试:

DECLARE
---- not needed
--  v_rows_approved_min NUMBER;
--  v_rows_approved_max NUMBER;
err VARCHAR2(300) := 'Not a valid SKU';
BEGIN
IF :P8_PRODUCT_OR_SKU = 'SKU' -- THIS IS MY SELECT LIST ITEM
THEN
---- err can be defaulted in declaration
--err := 'Not a valid SKU';

--v_rows_approved_min := 1;

---- not needed see  below
--SELECT COUNT(*) INTO v_rows_approved_max FROM sku_table;
FOR cur_a IN ( SELECT sku FROM sku_table ) LOOP
---- not needed. You're looping through the table, v_rows_approved_min will be > than v_rows_approved_max    
--EXIT WHEN v_rows_approved_min > v_rows_approved_max;
IF :P8_SKU = cur_a.sku THEN
RETURN err;
---- not needed
--      ELSE
--        NULL;
END IF;
---- not needed      
--      v_rows_approved_min := v_rows_approved_min + 1;
END LOOP;
---- not needed
--  ELSE
--    NULL;
END IF;
-- you need to return something whenever the function ends...
RETURN NULL;
END;
/

然而。。。这可以大大简化。

创建类型为"的验证;返回的行数;

来源:

SELECT
1
FROM
sku_table WHERE sku = :P8_SKU

错误消息:不是有效的SKU

服务器端条件(类型项=值(:项:P8_PRODUCT_OR_SKU;价值:SKU

这做了完全相同的事情。

相关内容

  • 没有找到相关文章

最新更新