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");
我刚刚开始涉足 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");