PL/SQL - 汇总值并写入 table

PL/SQL - Aggregate values & Write to table

我刚刚开始涉足 PL/SQL 所以这个问题可能非常简单。这是场景:

我有几个带有加权数值的复选框。例如:

Checkbox I --> Value '5'
Checkbox II --> Value '10'
Checkbox III --> Value '15'
etc.

表单总共有 15 个复选框,最终用户可以 select 从 0 到全部 15 个之间的任何地方。当他们 select 复选框时,将计算总重量并最终将显示数值。例如。勾选 3 个复选框 I 和 2 个复选框 III = 45 分。

现在 45 的总值将等于一个单独的值。示例:

At 0 points, value = 'Okay'
1-15 points, value = 'Error'
16-30 points, value = 'Warning'
31+ points, value = 'Critical'

表单本身是在 Oracle APEX 中构建的,我可以使用动态操作来完成,但使用 PL/SQL 可能是更好的解决方案。

总而言之,我希望隐藏字段首先计算选中复选框的总数,然后使用该总数计算出正常、错误、警告或严重的值。

非常感谢任何帮助!

根据我的经验,如果我们要在您的案例中使用 javascript 会更好,因为我们必须操纵 DOM 和复选框的事件。如果您想 display/change 项目值并在运行时获取值,那么 javascript 比 PLSQL 更好,除非您希望每次 check/uncheck 页面中的一个框时都提交页面这是不可取的。 这是我对你问题的解答。

首先,在您的页面上创建一个 Display Only 项目。这是值 "Okay"、"Error"、"Warning" 或 "Critical" 将出现的位置。将它的默认值设置为 0 非常重要。然后在页面的 "Function and Global Declaration" 部分中,放置以下函数:

        function getcheck(checkbox_id,displayOnly_id){
        var chkboxName = document.getElementById(checkbox_id + "_0").getAttribute("name");
        var chks = document.getElementsByName(chkboxName);
        var howmanychecks = chks.length;
        var currentSum=0;
        var v_remarks = "";
        for(x=0;x<howmanychecks;x++){
            chks[x].setAttribute("onchange","checkIfchecked(this,\'" + displayOnly_id + "\')");
            if(chks[x].checked){
                currentSum = currentSum + Number(chks[x].value);
            }
        }
        if(currentSum==0){
            v_remarks = "Okay";
        }
        else if(currentSum>0 && currentSum<=15){
            v_remarks = "Error";
        }
        else if(currentSum>15 && currentSum<=30){
            v_remarks = "Warning";
        }
        else{
            v_remarks = "Critical";
        }
        document.getElementById(displayOnly_id).value = currentSum;
        document.getElementById(displayOnly_id + "_DISPLAY").innerHTML = currentSum + ": " + v_remarks; 
    }

function checkIfchecked(p_element, displayOnly_id){
    var v_difference;
    var v_sum = Number($v(displayOnly_id));
    var displayOnly_display = displayOnly_id + "_DISPLAY";
    var v_remarks = "";
    if(p_element.checked){
        v_sum = v_sum + Number(p_element.value);
        $("#" + displayOnly_id).val(v_sum);

    }
    else{
       v_difference=Number($("#" + displayOnly_id).val())-Number(p_element.value);
       if(v_difference<0){
          v_difference=0;
       }
       $("#" + displayOnly_id).val(v_difference);
    } 
    if($("#" + displayOnly_id).val()==0){
        v_remarks = "Okay";
    }
    else if($("#" + displayOnly_id).val()>0 && $("#" + displayOnly_id).val()<=15){
        v_remarks = "Error";
    }
    else if($("#" + displayOnly_id).val()>15 && $("#" + displayOnly_id).val()<=30){
        v_remarks = "Warning";
    }
    else{
        v_remarks = "Critical";
    }
    document.getElementById(displayOnly_display).innerHTML=$("#" + displayOnly_id).val() + ": " + v_remarks;

}

以上函数将获取选中的那些框的值的总和。如果也未选中,则框的值将从当前总和中取出。也会显示当前选中点的备注,无论是"Okay","Error","Warning",还是"Critical".

在页面的 "Execute when Page Loads" 部分,添加以下行:

  getcheck(nameofyourcheckboxitem,nameofyourdisplayonlyitem);

其中 nameofyourcheckboxitem 是您的复选框的名称,nameofyourdisplayonlyitem 是您刚刚创建的仅显示项目的名称。

下面是关于如何使用我提供给您的函数的示例行:

    getcheck("P1_MYCHECKBOX","P1_MYDISPLAYONLY");