仅限制在oracle apex页面

时间:2018-04-05 08:47:55

标签: validation plsql oracle-apex oracle-apex-5.1

我已经在oracle apex中对页面中的不同项目进行了页面验证,但是当我单击“提交”按钮时,所有验证都会一次运行。

意味着,假设我有3行,并且我已经对这些行进行了单独的验证,就像我只在第1行中执行了某些操作然后在提交验证后应该仅在第1行显示时,我不会触及其他两行行。

但是发生的是所有行验证错误在提交后立即显示。

请帮忙解决这个问题。

1 个答案:

答案 0 :(得分:0)

declare

    v_amt number;
    v_disc number;
    v_flat_amt number;
    v_EXP_DATE DATE;
    v_disc_type varchar2(1);
begin
    select sum(c002 * c003) into v_amt
    from apex_collections
    where collection_name = 'items'
    and c003 <> 0;
    select sv.DISCOUNT_PREC, sv.FLAT_DISCOUNT_AMOUNT, cv.VOUCHER_ID, SV.EXPIRY_DATE,DISCOUNT_TYPE
    INTO v_disc, v_flat_amt, :P_VOUCHER_ID,v_EXP_DATE,v_disc_type
    from CUSTOMER_VOUCHERS cv, SALE_VOUCHERS sv
    WHERE CV.VOUCHER_ID = sv.ID
    AND CV.CUST_ID = :GLOBAL_CUSTOMER_ID
    AND PROMO_CODE=:P_VOUCHER_CODE
    AND NVL(AVAILED,'N')='N';

    if trunc(v_EXP_DATE) < trunc(sysdate) then
        :P13_DISC_PERC :=NULL;
        :P13_VOUCHER_ID:=NULL;
        APEX_ERROR.ADD_ERROR (
        p_message => v_EXP_DATE||'This is has been expired.',
        p_display_location => apex_error.c_inline_in_notification);
    end if;
    if v_disc_type = 'P' then
        :P13_DISC_PERC := round(v_amt*v_disc/100);
    else
        if v_flat_amt > v_amt then
            :P13_DISC_PERC := v_amt;
        else
            :P13_DISC_PERC := v_flat_amt;
        end if;
    end if;
    exception when no_data_found then
        :P_DISC_PERC :=NULL;
        :P_VOUCHER_ID:=NULL;
        APEX_ERROR.ADD_ERROR (
        p_message => 'Voucher not found.',
        p_display_location => apex_error.c_inline_in_notification);
end;