盒子
导航
文章目录
  1. 第一步
  2. 第二步

快速获取Form LOV的查询SQL

在项目的平时开发中我们经常会需要引用系统已有的值列表(LOV),然后去做我们的客户化的开发。如果是客户化的那么还可能通过打开Form直接查看的方式来获取LOV查询SQL,但如果是标准Form特别是类似采购订单界面、销售订单界面等复杂的Form就没那么简单了,下面的方法提供了一种快速获取Form Lov值列表SQL语句的方式,以销售订单事务处理类型设置界面为例,获取【完成集】LOV的查询SQL。

  • 操作路径: 销售职责(OM) > 设置 > 事务处理类型 > 定义
    快速获取Form LOV的查询SQL

第一步

获得当前界面的Session ID。可以通过个性化显示消息的方式来打印Session_ID。

  • 操作: 对【事务处理类型】界面实行个性化。
  • 操作路径: 帮助 > 诊断 > 自定义代码 > 个性化
    快速获取Form LOV的查询SQL

个性化选择的参数和设置如下图,其中显示Session ID的语句为:

=(SELECT t.sid FROM v$mystat t where rownum = 1)

个性化设置好之后不必保存,直接点击验证即可看到Session ID(这里的ID是1259):
快速获取Form LOV的查询SQL
快速获取Form LOV的查询SQL

第二步

切换到原界面(这里是事务处理设置界面),然后点击那个LOV,之后不要有其他界面操作:
快速获取Form LOV的查询SQL

然后通过上面查询到的Session ID,结合下面的SQL脚本就可以得到该LOV的查询语句了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DECLARE  
-->>查询指定会话下的前一个SQL操作的SQL地址
-->>依据该SQL地址取得SQL的查询脚本
CURSOR cur_resp IS
SELECT swn.sql_text
FROM v$sqltext_with_newlines swn
,v$session vs
WHERE swn.address = vs.prev_sql_addr
AND vs.sid = 1259 --session_Id
ORDER BY swn.piece ASC;

v_scripts CLOB;
BEGIN
-->>拼接查询脚本得到 LOV 的查询语句
FOR rec IN cur_resp LOOP
v_scripts := v_scripts || rec.sql_text;
END LOOP;
dbms_output.put_line(v_scripts);
END;

得到的LOV查询SQL为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
-->>更改环境查询语言  
ALTER SESSION SET NLS_LANGUAGE = 'SIMPLIFIED CHINESE';

-->>以下是获取到的 LOV 查询SQL
SELECT display_name
,description
,item_type
,NAME
,MAX(version)
FROM wf_activities_vl
WHERE TYPE = 'PROCESS'
AND nvl(end_date, SYSDATE) >= SYSDATE
AND item_type = 'OEOH'
AND runnable_flag = 'Y'
AND NAME NOT LIKE 'UPG_%'
GROUP BY display_name
,description
,NAME
,item_type

执行结果如图所示:
快速获取Form LOV的查询SQL