I just save this code for later use.
I used APEX 5.0 on the Oracle cloud.
I created 2 pages:
- Overview Page
- Edit Page
In the Overview page I load through a select-statement the data into a collection during the Pre-Rendering > Before Header > Processes > PL/SQL action, with the following code:
Declare l_query varchar2(300) := 'select department_id, department_name, manager_id from departments'; l_coll_name varchar2(50) := 'DEPARTMENTS'; Begin APEX_DEBUG.ENABLE(); APEX_DEBUG.INFO('Start fetchData'); if not APEX_COLLECTION.COLLECTION_EXISTS(l_coll_name) then APEX_DEBUG.INFO('Collection ' ||l_coll_name||' does not exist, creating a new one'); -- Create the collection from the query APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERY_B ( p_collection_name => l_coll_name, p_query => l_query); end if; APEX_DEBUG.INFO('End fetchData'); End;
I'm creating the collection only the first time that I'm entering the page. So when changes are made on the second page, these changes are immediately shown on this page on returning.
To show the data in a report, you can use a classic report with a query which looks like this one:
select c001, c002, c003, c004, c005 from apex_collections where collection_name = 'DEPARTMENTS' ;
In this simple example, I just copy the values from the collections to the editable fields on the Edit Page through the link-functionality.
When showing the Edit page, I add a save button, which on submitting the page saves the changes in the collection and the db if needed. These operations are performed in the Processing > Processes > PL/SQL code with the following code:
declare cursor c_get_seq is SELECT seq_id FROM APEX_collections WHERE collection_name = 'DEPARTMENTS' AND c001 = :P6_DEPTID ; r_seq c_get_seq%rowtype; begin open c_get_seq; fetch c_get_seq into r_seq; if c_get_seq%found then APEX_DEBUG.INFO('Collection found, updating); APEX_COLLECTION.UPDATE_MEMBER ( p_collection_name => 'DEPARTMENTS', p_seq => r_seq.seq_id, p_c001 => :P6_DEPTID, p_c002 => :P6_DEPTNAME, p_c003 => :P6_MANAGER); commit; -- update departments set department_name = :P6_DEPTNAME, manager_id = :P6_MANAGER where department_id = :P6_DEPTID; else APEX_DEBUG.ERROR('Collection not found!!'); end if; close c_get_seq; end;
After clicking on the save-button, the collection gets updated and the user returned to the previous page.