CREATE an APEX_COLLECTION and SELECT the data via SQL Developer
Maybe this an old hat but a lot of people don’t know how to use and analyze APEX_COLLECTION
properly. For myself it is a good reminder and saves me about 2 minutes instead of googling around.
In this example I will show you how to
- create an APEX_COLLECTION
- select the data in APEX reports
- analyze APEX_COLLECTION in SQL Developer
I will only show some basic steps. For a more detailed explanation please follow the official APEX documentation: APEX 5 - APEX_COLLECTION
Create an APEX_COLLECTION
:
In this example I check if my collection exists and if not then I will create a new one and add some rows.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
begin
-- http://www.oracle.com/global/de/community/tipps/collections/index.html
if not apex_collection.collection_exists('DATA_COLLECTION') then
apex_collection.create_collection('DATA_COLLECTION');
apex_collection.add_member(
p_collection_name => 'DATA_COLLECTION',
p_c001 => '1',
p_c002 => 'APEX & SQL: THE Reporting Solution',
p_c003 => 'Grundsätzlich soll mit der...',
p_c004 => '2015',
p_c005 => 'https://apex.oracle.com/pls/apex/f?p=55360:1'
);
apex_collection.add_member(
p_collection_name => 'DATA_COLLECTION',
p_c001 => '2',
p_c002 => 'Plug-Ins maßgerecht verwenden',
p_c003 => 'Wann macht ein Plugin Sinn...',
p_c004 => '2015',
p_c005 => 'https://apex.oracle.com/pls/apex/f?p=80307:1'
);
end if;
end;
Next is to select the data from inside an APEX report:
1
2
3
4
5
6
7
8
select
c001,
c002,
c003,
c004,
c005
from apex_collections
where collection_name = 'DATA_COLLECTION'
And finally I want to check if I get the same results inside my SQL Developer:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- Set up APEX SESSION
declare
v_ws_id number;
v_app_id number := &app_id;
v_session_id number := &session_id;
begin
select workspace_id into v_ws_id from apex_workspaces;
wwv_flow_api.set_security_group_id(v_ws_id);
wwv_flow.g_flow_id := v_app_id;
wwv_flow.g_instance := v_session_id;
end;
/
-- Execute SQL
select *
from apex_collections
where collection_name = 'DATA_COLLECTION';
That is it.