请问在ORACLE中,我能不能知道某一个函数在被哪个别的步骤或函数调用。
举个例子,我有个函数 FUNCTION fun(par1 in varchar2 , par2 out varchar2); 然后我有一个步骤
PROCEDURE testpro(parameters IN VARCHAR2,result     OUT VARCHAR2);然后我在testpro 里面调用fun函数如: PROCEDURE testpro(parameters IN VARCHAR2,result     OUT VARCHAR2) as 
begin
fun('test');
end testpro;我就是想问我能不能在函数fun中知道是谁调用的自己,也就是说我能不能知道是testpro调用自己。不胜感激!!

解决方案 »

  1.   

    打开SI_Browser.找到你的函数,点击右键,选择[相关-关联信息图]。就可以查找到了
      

  2.   

    这个问题比较高深。在编程语言里面要知道运行态的调用路径好像也比较复杂, oracle估计都不会提供这种功能。如果只是想知道有哪些过程或函数调用了这个函数,那可能还好办一点,对所有过程或函数的内容作词法分析,倒是可以知道的。
      

  3.   

    SELECT *
      FROM ALL_SOURCE
     WHERE INSTR(UPPER(TEXT),UPPER('fun')) > 0;
      

  4.   

    楼上的大概准确,如果源码中包含了字符串fun就可能不对了。
      

  5.   


    oracle中应该有专门的视图解决这样的问题!
      

  6.   

    6楼正解。可以看到的。例:select * from all_source where instr(UPPER(TEXT),UPPER('p_cts_cdma1xsp_in'))>0        owner    name                   type           line     text
    1 IMPORT P_CTS_CDMA1XSP_IN_SPEC PROCEDURE 1 "PROCEDURE P_CTS_CDMA1XSP_IN_SPEC"
    2 IMPORT P_CTS_CDMA1XSP_IN PROCEDURE 1 "PROCEDURE P_CTS_cdma1xsp_IN"
    3 IMPORT P_CTS_CDMA1XSP_PREPARE PROCEDURE 32 "   p_cts_CDMA1XSP_in(v_areaid ,v_date ,iv_res ,iv_err) ;"
    4 IMPORT P_CTS_CDMA1XSP_PREPARE PROCEDURE 34 "      v_resultinfo := 'p_cts_CDMA1XSP_in@:'||iv_err ;"
    5 IMPORT P_CTS_CDMA1XSP_PREPARE PROCEDURE 39 "   p_cts_CDMA1XSP_in_spec(v_areaid ,v_date ,iv_res ,iv_err) ;"
    6 IMPORT P_CTS_CDMA1XSP_PREPARE PROCEDURE 41 "      v_resultinfo := 'p_cts_CDMA1XSP_in_spec@:'||iv_err ;"
      

  7.   

    其实说白了,我就是想在fun中知道现在此时此刻谁正在调用这个函数