APEX 4.2 - 交互式报告中的动态值列表
APEX 4.2 - Dynamic list of values in interactive report
我有一个包含 2 列的交互式报告。
报告来源
SELECT APEX_ITEM.CHECKBOX2(1,a.USR_CODIGO,DECODE(NVL((SELECT 1 FROM PROYECTOS_ROLES_USUARIOS pru WHERE pru.USR_CODIGO = a.USR_CODIGO AND pru.PRY_ID = :P92_PRY_ID),0),0,'UNCHECKED',1,'CHECKED')) as Incluir,
a.USR_CODIGO as Usuario FROM USUARIOS a;
我想添加第三列,一个应由此代码填充的动态值列表
SELECT ROL_DESCRIPCION AS display_value, ROL_CODIGO as return_value FROM ROLES WHERE EXISTS (SELECT 1
FROM ROLES_USUARIOS
WHERE ROL_CODIGO = ROLES.ROL_CODIGO
AND USR_CODIGO = a.USR_CODIGO)) as Rol
a.USR_CODIGO应该是报告每一行的pk。
有什么办法吗?
是的,你必须使用 APEX_ITEM 包,特别是
select_list_from_lov 函数,为此,您需要先使用第二个查询创建一个应用程序值列表 (LOV),然后将 apex_item 调用添加到您的第一个查询。请注意,您已经在第一个查询中使用了 APEX_ITEM 包,添加此函数应该没有任何问题:
APEX_ITEM.SELECT_LIST_FROM_LOV(
p_idx IN NUMBER,
p_value IN VARCHAR2 DEFAULT NULL,
p_lov IN VARCHAR2,
p_attributes IN VARCHAR2 DEFAULT NULL,
p_show_null IN VARCHAR2 DEFAULT 'YES',
p_null_value IN VARCHAR2 DEFAULT '%NULL%',
p_null_text IN VARCHAR2 DEFAULT '%',
p_item_id IN VARCHAR2 DEFAULT NULL,
p_item_label IN VARCHAR2 DEFAULT NULL,
p_show_extra IN VARCHAR2 DEFAULT 'YES')
此处的 p_lov 参数将是您之前生成的应用程序值列表的名称。
但是如果您不想生成 LOV,您可以使用 select_list_from_query 函数:
APEX_ITEM.SELECT_LIST_FROM_QUERY(
p_idx IN NUMBER,
p_value IN VARCHAR2 DEFAULT NULL,
p_query IN VARCHAR2,
p_attributes IN VARCHAR2 DEFAULT NULL,
p_show_null IN VARCHAR2 DEFAULT 'YES',
p_null_value IN VARCHAR2 DEFAULT '%NULL%',
p_null_text IN VARCHAR2 DEFAULT '%',
p_item_id IN VARCHAR2 DEFAULT NULL,
p_item_label IN VARCHAR2 DEFAULT NULL,
p_show_extra IN VARCHAR2 DEFAULT 'YES')
其中 p_query 将是您发布的第二个查询。
我有一个包含 2 列的交互式报告。 报告来源
SELECT APEX_ITEM.CHECKBOX2(1,a.USR_CODIGO,DECODE(NVL((SELECT 1 FROM PROYECTOS_ROLES_USUARIOS pru WHERE pru.USR_CODIGO = a.USR_CODIGO AND pru.PRY_ID = :P92_PRY_ID),0),0,'UNCHECKED',1,'CHECKED')) as Incluir,
a.USR_CODIGO as Usuario FROM USUARIOS a;
我想添加第三列,一个应由此代码填充的动态值列表
SELECT ROL_DESCRIPCION AS display_value, ROL_CODIGO as return_value FROM ROLES WHERE EXISTS (SELECT 1
FROM ROLES_USUARIOS
WHERE ROL_CODIGO = ROLES.ROL_CODIGO
AND USR_CODIGO = a.USR_CODIGO)) as Rol
a.USR_CODIGO应该是报告每一行的pk。
有什么办法吗?
是的,你必须使用 APEX_ITEM 包,特别是 select_list_from_lov 函数,为此,您需要先使用第二个查询创建一个应用程序值列表 (LOV),然后将 apex_item 调用添加到您的第一个查询。请注意,您已经在第一个查询中使用了 APEX_ITEM 包,添加此函数应该没有任何问题:
APEX_ITEM.SELECT_LIST_FROM_LOV(
p_idx IN NUMBER,
p_value IN VARCHAR2 DEFAULT NULL,
p_lov IN VARCHAR2,
p_attributes IN VARCHAR2 DEFAULT NULL,
p_show_null IN VARCHAR2 DEFAULT 'YES',
p_null_value IN VARCHAR2 DEFAULT '%NULL%',
p_null_text IN VARCHAR2 DEFAULT '%',
p_item_id IN VARCHAR2 DEFAULT NULL,
p_item_label IN VARCHAR2 DEFAULT NULL,
p_show_extra IN VARCHAR2 DEFAULT 'YES')
此处的 p_lov 参数将是您之前生成的应用程序值列表的名称。
但是如果您不想生成 LOV,您可以使用 select_list_from_query 函数:
APEX_ITEM.SELECT_LIST_FROM_QUERY(
p_idx IN NUMBER,
p_value IN VARCHAR2 DEFAULT NULL,
p_query IN VARCHAR2,
p_attributes IN VARCHAR2 DEFAULT NULL,
p_show_null IN VARCHAR2 DEFAULT 'YES',
p_null_value IN VARCHAR2 DEFAULT '%NULL%',
p_null_text IN VARCHAR2 DEFAULT '%',
p_item_id IN VARCHAR2 DEFAULT NULL,
p_item_label IN VARCHAR2 DEFAULT NULL,
p_show_extra IN VARCHAR2 DEFAULT 'YES')
其中 p_query 将是您发布的第二个查询。