月下狼~图腾~ 发表于 2013-1-29 14:34:31

快速查询form界面的lov查询sql

在项目上经常会有功能顾问让我们去查找某个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;
页: [1]
查看完整版本: 快速查询form界面的lov查询sql