Oracle apex左右拖拽框设计

效果


页面代码


其中 List of values 表示左侧拖拽框的值集,格式为 【显示名,编号】,以逗号分隔;

Default表示默认已拖拽到右侧框的值集,格式为【编号1:编号2】,以冒号分隔;


将右侧值集保存到数据库

添加页面处理程序,选择程序类型为PL/SQL

declare
    tab apex_application_global.vc_arr2; 
    v_sql varchar2(500);
begin 
    --拼接删除右侧框移除列的sql
    v_sql := 'delete sys_role_privs where role_id = ' || :P10046_ROLE_ID   ;
    if :P10046_SHUTTLE is not null then
      v_sql := v_sql || ' and priv_id not in ( ' || replace(:P10046_SHUTTLE,':',',') || ')';  
    end if ;
    execute immediate v_sql ;

    --将新增加的列添加到数据库
    tab := apex_util.string_to_table (:P10046_SHUTTLE);
    for i in 1..tab.count loop 
        merge into sys_role_privs  srp 
          using (select :P10046_ROLE_ID rid ,tab(i) pid from dual )  src
          on (srp.role_id = src.rid and srp.priv_id = src.pid ) 
          when not matched then insert (srp.role_id,srp.priv_id) values ( :P10046_ROLE_ID , tab(i) ) ; 
    end loop;
    commit; 
end;
  • No labels