Oracle11g 在DB列中保存复选框数据

Oracle11g 在DB列中保存复选框数据,oracle11g,oracle-apex,oracleapplications,Oracle11g,Oracle Apex,Oracleapplications,我在OracleApex中创建了一个项目P1_复选框,使用emp中的LOVselect ename、empno,其中ename类似于“s%”;这会给出多个复选框。 当我选中复选框时,我想将复选框数据插入另一个表emp_selected中 然后,当我再次登录应用程序时,应用程序现在应该根据插入表emp_中的数据以及表emp中未选中的复选框勾选复选框,并且当我取消选中一些预选复选框并选中新复选框时,它应该在emp_selected中相应地更新 我的Oracle APEX版本是4.2。如果您想在特定的

我在OracleApex中创建了一个项目P1_复选框,使用emp中的LOVselect ename、empno,其中ename类似于“s%”;这会给出多个复选框。 当我选中复选框时,我想将复选框数据插入另一个表emp_selected中

然后,当我再次登录应用程序时,应用程序现在应该根据插入表emp_中的数据以及表emp中未选中的复选框勾选复选框,并且当我取消选中一些预选复选框并选中新复选框时,它应该在emp_selected中相应地更新


我的Oracle APEX版本是4.2。

如果您想在特定的检查事件中插入数据,那么您可以使用Ajax回调和按需运行流程。它将从JavaScript代码获得调用。
您可以参考此博客:

带有多个复选框的apex复选框将其状态保存为所有选定值,并用冒号连接,例如一:二:三。 因此,您必须分离这些值,循环它们,然后保存它们。 您需要正确配置复选框源。 apex_演示/演示

我所有的设置都在那个页面上。在本例中,我使用apex集合来模拟存储值的表。原则是完全相同的-您只需根据您的选择调整您的表格

复选框LOV SQL:

复选框源设置:

来源:始终-SQL查询返回冒号分隔的值

这将获取所有选定的值,并用冒号将它们连接起来。复选框将获取这些值并将其标记为选中

提交后的流程:


请记住,您可以在应用程序进程上以比这更干净的方式实现AJAX调用。e、 g.通过使用apex.server.process.OP,希望保存复选框状态。我不明白您是如何跳到ajax进程来执行此操作的。您好@Tom,谢谢您的回复。但我有一个问题,在选择复选框后,我希望复选框的值存储在另一个表“emp_selected”中,然后当有人再次登录时,我希望显示emp中的复选框,但应勾选复选框,其值存储在“emp_selected”中,如果我取消选中某些复选框,并再次保存数据,“emp_selected”表应相应更新。@DOC这就是我使用集合的原因。几乎所有您需要做的就是使用sql更改集合调用,sql操作您的表。例如,add_成员将是emp_所选表中的INSERT语句。该项的源不是从collections视图中选择的,而是从您自己的表中选择的。这是非常基本的sql和plsql。我尝试使用Insert语句>Insert into emp_selected eno、ename、dname、creation_date valuesl_vc_arr2z、:P1_NAME、:P1_DEPT、SYSDATE;代替>顶点集合.add\u memberp\u集合\u name=>“CHECKBOX\u EXAMPLE”,p\u c001=>l\u vc\u arr2z;在source中,我使用了>Selecteno from emp_selected,其中eno='CHECKBOX_EXAMPLE';而不是>从apex_collections中选择c001,其中collection_name='CHECKBOX_EXAMPLE',但我得到一个错误ORA-01722:无效数字您不需要源中的where子句。where子句仅适用于apex集合。由于您将数字列与字符串进行比较,因此它将尝试转换字符串,您将得到该错误。您好@Tom,我之前编辑了where子句,错误消失了,但数据没有插入到表“emp_selected”中。提交流程代码后,>声明l_vc_arr2 APEX_APPLICATION_GLOBAL.vc_arr2;开始apex_集合。创建或截断_集合“复选框_示例”;l_vc_arr2:=顶点使用字符串到表:P1_销售;对于1..l_vc_arr2.count循环apex_debug.messagel_vc_arr2z中的z;在emp_中插入所选empno、ename、dname、创建日期值l_vc_arr2z、:P1_NAME、:P1_DEPT、SYSDATE;端环;终止
select ename, empno from emp
select c001
from apex_collections
where collection_name = 'CHECKBOX_EXAMPLE'
DECLARE
    l_vc_arr2    APEX_APPLICATION_GLOBAL.VC_ARR2;
BEGIN
  apex_collection.create_or_truncate_collection('CHECKBOX_EXAMPLE');
    l_vc_arr2 := APEX_UTIL.STRING_TO_TABLE(:P37_CHECKBOXES);
    FOR z IN 1..l_vc_arr2.count LOOP
        apex_debug.message(l_vc_arr2(z));
        apex_collection.add_member(p_collection_name => 'CHECKBOX_EXAMPLE', p_c001 => l_vc_arr2(z));
    END LOOP;
END;