Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment créer et utiliser une liste à sélection multiple dans APEX ORACLE ?

Il y a l'élément de la navette . Sur le côté gauche, vous afficheriez la liste de tous les employés. Les boutons d'élément vous permettent de déplacer tous (ou seulement certains d'entre eux) vers le côté droit de l'élément. Une fois que vous soumettez la page, la liste des identifiants des employés est stockée dans une colonne de tableau sous la forme de valeurs séparées par deux-points, par exemple

6547:8879:5587:9987

C'est une façon simple de le faire. Cependant, une fois que vous devez réellement faire quelque chose avec ces valeurs, vous devez les diviser en lignes. Pas un problème, cependant. Voici une requête :

SQL> with emps (shuttle_item) as
  2    (select '6547:8879:5587:9987' from dual)
  3  select regexp_substr(shuttle_item, '[^:]+', 1, level) one_item
  4  from emps
  5  connect by level <= regexp_count(shuttle_item, ':') + 1;

ONE_ITEM
---------------------------------------------------------------------
6547
8879
5587
9987

SQL>

Ou, vous pouvez créer un formulaire tabulaire qui affiche également tous les employés et comporte des cases à cocher au début de chaque ligne. Vous créeriez alors un processus qui - dans une boucle - stocke les valeurs sélectionnées dans une table temporaire vous avez mentionné. Par exemple :

-- F01 = row selector. If you check 1st and 3rd row, f01.count = 2 (2 rows checked)
--       f01(1) = 1 (row #1), f01(2) = 3 (row #3)
-- F02 = EMP_ID. f02(1) = EMP_ID that belongs to employee in 1st row, 
--       f02(3) = EMP_ID that belongs to emplyee in 3rd row
declare
  l_id number;
begin
  for j in 1 .. apex_application.g_f01.count
  loop
    l_id := apex_application.g_f02(apex_application.g_f01(j));

    insert into temp_table (emp_id) values (l_id);
  end loop;
end;