sql >> Database teknologi >  >> RDS >> Oracle

Hvordan opretter og bruger man en multi-select-liste i APEX ORACLE?

Der er Shuttle-elementet . I venstre side vil du vise en liste over alle medarbejdere. Elementknapper giver dig mulighed for at flytte alle (eller kun nogle af dem) til højre side af elementet. Når du har indsendt siden, gemmes listen over medarbejder-id'er i en tabelkolonne i form af kolon-separerede værdier, for eksempel

6547:8879:5587:9987

Dette er en enkel måde at gøre det på. Men når du faktisk skal gøre noget med de værdier, du skal opdele dem i rækker. Dog ikke et problem. Her er en forespørgsel:

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>

Eller du kan oprette en tabelformular, som også viser alle medarbejdere og har afkrydsningsfelter i begyndelsen af ​​hver linje. Du vil derefter oprette en proces, som - i en løkke - gemmer udvalgte værdier i en midlertidig tabel du nævnte. For eksempel:

-- 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;


  1. En begyndervejledning til SQL-tabeller

  2. Vælg alle kolonner undtagen nogle PostgreSQL

  3. MySQL DATETIME - Skift kun datoen

  4. Slut på support for SQL Server 2008 &2008 R2