Scott が述べたように、1 つのオプションは、refcursor を使用して APEX コレクションを作成し、次に APEX_COLLECTIONS ビューを使用してデータからインタラクティブ グリッドを作成することです。これを示すために例を作成しました。
ヘッダーの前にプリレンダリング プロセスを作成します。このメソッドを使用すると、コレクションが既に存在する場合、またはユーザーがページを更新するたびにデータが更新されない場合に、データを再入力しないようにする追加のロジックを追加できます。
プリレンダリング プロセスのセットアップ
コレクションを生成するソース コード:
DECLARE
l_ref_cur SYS_REFCURSOR;
TYPE user_skill_rec IS RECORD
(
user_id NUMBER,
name VARCHAR2 (100),
java VARCHAR2 (1),
php VARCHAR2 (1),
plsql_sql VARCHAR2 (1),
oracle_apex VARCHAR2 (1)
);
l_user_skill user_skill_rec;
FUNCTION get_ref_cursor
RETURN SYS_REFCURSOR
IS
l_cur SYS_REFCURSOR;
BEGIN
OPEN l_cur FOR
SELECT 3 AS user_id,
'Amy brown' AS name,
'N' AS java,
'N' AS php,
'Y' AS plsql_sql,
'N' AS oracle_apex
FROM DUAL
UNION ALL
SELECT 4 AS user_id, 'Sarah woods', 'N', 'N', 'Y', 'Y' FROM DUAL
UNION ALL
SELECT 2 AS user_id, 'Johnny paterson', 'Y', 'Y', 'Y', 'Y' FROM DUAL
UNION ALL
SELECT 1 AS user_id, 'John brown', 'Y', 'N', 'Y', 'Y' FROM DUAL;
RETURN l_cur;
END;
BEGIN
l_ref_cur := get_ref_cursor;
apex_collection.create_or_truncate_collection ('USER_SKILLS');
LOOP
FETCH l_ref_cur INTO l_user_skill;
EXIT WHEN l_ref_cur%NOTFOUND;
apex_collection.add_member (p_collection_name => 'USER_SKILLS',
p_n001 => l_user_skill.user_id,
p_c001 => l_user_skill.name,
p_c002 => l_user_skill.java,
p_c003 => l_user_skill.php,
p_c004 => l_user_skill.plsql_sql,
p_c005 => l_user_skill.oracle_apex);
END LOOP;
END;
次に、データが移入されたのと同じコレクションで APEX_COLLECTIONS ビューを問い合せるインタラクティブ・レポートを作成します:
対話型レポートのセットアップ
ソース クエリ:
select n001, c001, c002, c003, c004, c005
from apex_collections
where collection_name = 'USER_SKILLS'