暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 如何从Apex视图中拉出查找名称 (用于选择列表/LOV)

ASKTOM 2020-06-13
574

问题描述

嗨,

我试图弄清楚如何从Apex视图apex_application_page_items中提取用于我的一个应用程序中的各种选择列表和LOV的表的名称。

我可以从这个脚本中获得我想要的基本信息:
SELECT page_id,
       page_name,
       item_name,
       label,
       display_as,
       lov_named_lov,
       lov_definition,
       condition_type,
       condition_expression1,
       condition_expression2
  FROM apex_application_page_items
 WHERE     application_id = 221
       AND (display_as = 'Select List' OR display_as = 'Popup LOV')


但是作为新视图的一部分,我也想以某种方式从lov_definition中提取查找表的表名。动态查询 (视图) 将使这比手动保持表更新容易得多。

似乎从简单的选择列表中提取名称,例如:
select protocol_description d, protocol_description r
from lu_water_coll_protocol
order by sort_order

应该很简单,但我就是想不出来。在上面的示例中,我想拉出 “lu_water_coll_protocol” 作为查找表名称。

然后当然,尝试从更复杂的代码中提取它,例如返回SQL的PL/SQL函数要困难得多 (至少对我而言)。对于我的使用,我已经添加了 'lu_ '前缀到我的所有查找表,所以也许从DBA_TABLES中提取table_names会让它变得更容易,但我仍然对如何实现这一点不知所措。

我希望很快退休,我正在努力让任何接替我的人尽可能轻松地工作。

我不认为我需要创建一个测试用例,因为我 “认为” 你可能可以使用你自己的模式来完成我认为我需要的,而且看起来这已经是一个Apex应用程序,有几个选择列表/LOV。


专家解答

这似乎是对LOVs的更狭隘关注,现实不是吗?

例如,LOV可能是

-静态值
-一个简单的select语句
-十路加入15个联盟所有声明
-带有8个子查询的嵌套SQL

等等等等

因此,爱中的 “表” 概念并不真正存在。

你能做的一件事是

-对于您提供的查询结果中的每一行
-如果定义不以 “静态” 或句点开始,则
-对内容进行解释计划
-在连接到所有表的plan_table上运行select distinct object_name到潜在表

那里仍然有很多差距,但你明白了。

SQL> variable s varchar2(1000)
SQL>
SQL> exec :s := 'select * from emp e, dept d where d.deptno = e.deptno'

PL/SQL procedure successfully completed.

SQL>
SQL> delete plan_table;

6 rows deleted.

SQL> exec execute immediate 'explain plan into plan_table for '||:s;

PL/SQL procedure successfully completed.

SQL>
SQL> select t.table_name
  2  from   dba_tables t,
  3         plan_table p
  4  where t.owner = p.object_owner
  5  and   t.table_name = p.object_name;

TABLE_NAME
------------------------------
DEPT
EMP

SQL>
SQL>
SQL> select listagg(t.table_name,',') within group ( order by t.table_name)
  2  from   dba_tables t,
  3         plan_table p
  4  where t.owner = p.object_owner
  5  and   t.table_name = p.object_name;

LISTAGG(T.TABLE_NAME,',')WITHINGROUP(ORDERBYT.TABLE_NAME)
-------------------------------------------------------------------------------------------
DEPT,EMP


文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论