问题描述
你好!
有没有一种方法来获取调用pl/sql函数或其where子句的select语句?
例如,如果调用是:
从其中field2 = “测试” 的表中选择customFunction (参数) 作为FuncResult,field1
Is it possible to retrive either the complete select statement (从其中field2 = “测试” 的表中选择customFunction (参数) 作为FuncResult,field1) or the where clause (field2 = 'test') in the pl/sql code of customFunction() ?
正如您可能已经扣除的那样,我不控制/构建where子句。另一个软件 (呼叫者) 正在执行此操作,因此我无法更改/更改它。
谢谢
有没有一种方法来获取调用pl/sql函数或其where子句的select语句?
例如,如果调用是:
从其中field2 = “测试” 的表中选择customFunction (参数) 作为FuncResult,field1
Is it possible to retrive either the complete select statement (从其中field2 = “测试” 的表中选择customFunction (参数) 作为FuncResult,field1) or the where clause (field2 = 'test') in the pl/sql code of customFunction() ?
正如您可能已经扣除的那样,我不控制/构建where子句。另一个软件 (呼叫者) 正在执行此操作,因此我无法更改/更改它。
谢谢
专家解答
据我所知没有。这里有一点catch-22,因为要探测该SQL,我们必须 * 运行 * SQL,当然,这将成为当前正在运行的SQL,例如
您是否在运行时 (即在函数内) 需要它,或者您只是试图检测过多的调用等。您可以对v $ sqlstats进行一些数据挖掘,以检测执行、处理的行等
即使你 * 可以 * 拿起它,我会担心,因为你通常不想积极地查询v $ 结构,所以即使我上面的例子不会很好,如果你做 (说)
从all_objects中选择blah(object_id);
因为我在一次通话中会粉碎v $ session数万次。
SQL> create or replace
2 function blah(c int) return int is
3 l_sql_id1 varchar2(30);
4 l_sql_id2 varchar2(30);
5 l_sql_text varchar2(1000);
6 begin
7 select sql_id, prev_sql_id
8 into l_sql_id1, l_sql_id2
9 from v$session
10 where sid = sys_context('USERENV','SID');
11
12 dbms_output.put_line(l_sql_id1);
13 dbms_output.put_line(l_sql_id2);
14
15 return c;
16 end;
17 /
Function created.
SQL>
SQL> set serverout on
SQL> select blah(10) from dual;
BLAH(10)
----------
10
fu3ng5ux16xn2
5t10uu7v11s5t
SQL> select sql_id, sql_text
2 from v$sql
3 where sql_id in
4 ( 'fu3ng5ux16xn2','5t10uu7v11s5t');
SQL_ID SQL_TEXT
------------- ----------------------------------------------------------------
5t10uu7v11s5t BEGIN DBMS_OUTPUT.ENABLE(NULL); END;
fu3ng5ux16xn2 SELECT SQL_ID, PREV_SQL_ID FROM V$SESSION WHERE SID = SYS_CONTEX
T('USERENV','SID')
您是否在运行时 (即在函数内) 需要它,或者您只是试图检测过多的调用等。您可以对v $ sqlstats进行一些数据挖掘,以检测执行、处理的行等
即使你 * 可以 * 拿起它,我会担心,因为你通常不想积极地查询v $ 结构,所以即使我上面的例子不会很好,如果你做 (说)
从all_objects中选择blah(object_id);
因为我在一次通话中会粉碎v $ session数万次。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




