在 ApEx 中从数据库集合对象创建 LOV

Posted

技术标签:

【中文标题】在 ApEx 中从数据库集合对象创建 LOV【英文标题】:Creating an LOV from Database Collection Object in ApEx 【发布时间】:2013-07-05 14:21:39 【问题描述】:

我正在尝试根据存储在集合对象中的值在 ApEx 中创建一个选择列表。

基本上我正在运行一个调用 java 类的存储过程,该类设置 varchar2 数组的值。

要获取值并将它们打印到 dbms 输出,我可以运行以下 PLSQL 块:

DECLARE
    vArray testschema.stringarray_type := testschema.stringarray_type();
BEGIN
    testschema.getLOV(vArray);

    FOR i IN 1..vArray.COUNT LOOP
        DBMS_OUTPUT.PUT_LINE('Counter: ' || i || ' Value: "' || vArray(i) || '".');
    END LOOP;

END;

现在我只需要将所有这些值放入一个选择列表中,而不是将它们打印出来。

如何重写此 PLSQL 代码来代替选择列表的 LOV 源?

有没有办法改变代码来做这样的事情:

FOR i IN 1..vArray.COUNT LOOP
    :P1_SELECT_LIST.append(vArray(i));
END LOOP;

并以动态动作或其他方式运行它?

谢谢

编辑:

我做了一个临时解决方法,现在我在页面加载时使用动态操作来运行一些 PLSQL。我将对象中的每个值附加到我的 plsql 块中的 varchar2 变量中,用逗号分隔。然后我设置一个隐藏页面项等于该变量的值,因此它的值类似于:

item1,item2,item3,item4,item5

然后通过 javascript 动态操作,我将项目值拆分为逗号,然后将选择列表的 html 替换为自定义构建的 html 字符串,以将我的所有项目列为选项。

这不是我理想的解决方案,所以我仍然想弄清楚是否有更好的方法。或者也许可以在更好的解决方案中使用此解决方法的一部分。

【问题讨论】:

如何显示这些值?穿梭?复选框?文本字段? 我希望它们出现在选择列表中(html 组合框) 【参考方案1】:

如果您将过程修改为返回一个可变数组的函数,那么您可以使用如下定义的查询创建一个动态 APEX 值列表对象:

BEGIN
    return 'select column_value d, column_value r from table(testschema.getLOV())';
END;

【讨论】:

【参考方案2】:

您可以使用 POPUP_FROM_QUERY 函数。阅读这里http://docs.oracle.com/cd/E23903_01/doc/doc.41/e21676/apex_item.htm#CHDEBCCI

【讨论】:

【参考方案3】:

使用 Tony 建议的函数包装您的过程:

create 
function apx_getLOV
  return testschema.stringarray_type
as
  l_result testschema.stringarray_type;
begin
  testschema.getLOV(l_result);

  return l_result;
end apx_getLOV;
/

您在 LOV 源中的查询将是下一个:

select column_value d, column_value r from table(apx_getLOV())

您可以阅读表集合表达式here。

【讨论】:

以上是关于在 ApEx 中从数据库集合对象创建 LOV的主要内容,如果未能解决你的问题,请参考以下文章

Oracle APEX 数据网格 LOV 在单击之前不显示显示名称

Oracle Apex - 逗号分隔的 LOV

APEX Shuttle - 获得更多选定值

Oracle Apex 5.1:基于 LOV(值列表)的报告列显示返回值而不是显示值

APEX 以表格形式创建动态值列表

Oracle Apex 根据 LOV 选择的值动态启用/禁用文本字段