PL / SQL - 聚合值&写到表格

时间:2015-10-11 19:54:43

标签: sql plsql oracle-apex

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

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

  

复选框I - >价值' 5'
  复选框II - >价值' 10'
  复选框III - >价值' 15'
  等

表单总共有15个复选框,最终用户可以选择0到15之间的任何位置。当他们选中复选框时,将计算总权重并显示最终数值。例如。检查3 Checkbox I& 2 Checkbox III将= 45分。

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

  

在0分,值='好的'
  1-15分,值='错误'
  16-30分,值='警告'
  31+点,值='严重'

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

总之,我希望隐藏字段首先从选中的复选框中计算总数,然后使用该总计来计算出Okay,Error,Warning或Critical的值。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

根据我的经验,如果我们在您的案例中使用javascript会更好,因为我们必须操纵DOM和复选框的事件。如果你想在运行时显示/更改项目值并获取值,那么javascript比PLSQL更好,除非你想在每次检查/取消选中页面中不合适的方框时提交你的页面。 这是我的问题解决方案。

首先,在您的页面上创建一个Display Only项。这就是值" Okay","错误","警告"或"严重"会出现。将其默认值设置为0非常重要。然后在您的页面内部"功能和全局声明"部分,提出以下功能:

        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;

}

上述函数将获得所检查的那些框的值的总和。如果未选中,则将从当前总和中取出一个框的值。它还会显示当前检查点的备注,无论是否为&#34; Okay&#34;,&#34;错误&#34;,&#34;警告&#34;或&#34;严重&#34 ;

在你的&#34;当页面加载时执行&#34;在页面的一部分,添加以下行:

  getcheck(nameofyourcheckboxitem,nameofyourdisplayonlyitem);

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

以下是关于如何使用我给你的功能的示例行:

    getcheck("P1_MYCHECKBOX","P1_MYDISPLAYONLY");