快速查询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;

 

 

你可能感兴趣的:(oracle,sql,脚本)