在项目上经常会有功能顾问让我们去查找某个form的item对应的lov,最简单直接,也是最笨的方法是打开该from,定位item,定位lov, 运气好点,碰到LOV和Record Group都是固定的就一下找到了,运气不好有可能LOV是动态绑定到ITEM上,而LOV的RG是动态生成,想找个查询的SQL,可能要吐血.
下面介绍一个最简单的方法,这个方法共分三个步骤:
1.Form界面,点击帮助->关于oracle应用产品获得会话sid值(即session_id)
(如果你在这个界面没有看到会话sid值,去检查下你的FND:诊断这个配置文件的值是否为是)
2.打开一个item的lov(注意打开后查询一个值,且不要关闭该值集框)
3.在plsql中执行 如下sql脚本,输入sid值查看output就可以取得该lov的查询代码
DECLARE
CURSOR CUR_LOV_SQL(P_PRE_SQL_ADDR VARCHAR2) IS
SELECT T.SQL_TEXT
FROM V$SQLTEXT_WITH_NEWLINES T
WHERE T.ADDRESS = P_PRE_SQL_ADDR
ORDER BY T.PIECE;
--
L_LOV_SQL VARCHAR2(2400);
L_PREV_SQL_ADDR VARCHAR2(200);
BEGIN
BEGIN
SELECT V.PREV_SQL_ADDR
INTO L_PREV_SQL_ADDR
FROM V$SESSION V
WHERE V.SID = &SID;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('get prev sql addr error,' || SQLCODE || ':' ||
SQLERRM);
END;
--
FOR REC IN CUR_LOV_SQL(L_PREV_SQL_ADDR) LOOP
L_LOV_SQL := NVL(L_LOV_SQL,
'') || REC.SQL_TEXT;
END LOOP;
--
DBMS_OUTPUT.PUT_LINE('lov查询sql为:');
DBMS_OUTPUT.PUT_LINE(L_LOV_SQL);
END;