运行基于JavaScript的过程时检索子查询 [英] Retrieving Child Queries When We Run JavaScript Based Procedure
本文介绍了运行基于JavaScript的过程时检索子查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有这样要求:我有许多JavaScript过程,我必须找出对过程运行的调用,以及在对过程的主调用下运行的子SQL(过程内的SQL)是什么。
是否可以使用QUERY_HISTORY完成此操作?如果可以,则使用QUERY_HISTORY数据集链接到关联的子SQL运行的主过程运行需要考虑哪些属性。
推荐答案
我尝试使用QUERY_TAG,但您无法在SP内执行ALTER SESSION,因此它不起作用。
我看没有简单的方法。
我能想到的一个办法是在调用SP之前用其名称标记SP的查询,如下所示:
alter session set QUERY_TAG = 'sp_test_2';
call sp_test_2();
alter session set QUERY_TAG = ''; -- reset it after calling the SP
则SP内运行的查询将标记为sp_test_2。
然后使用以下查询查找父项和子项:
with parent_sp as (
select regexp_replace(query_text, 'call (.*)\(.*', '\1') as key, *
from table(information_schema.query_history())
where query_text ilike 'call%'
),
child_sp as (
select QUERY_TAG as key, *
from table(information_schema.query_history())
where query_text not ilike 'call %'
)
select
p.query_id, p.query_text, p.query_tag,
c.query_id, c.query_text, c.query_tag
from parent_sp p
JOIN child_sp c
ON (
p.key = c.key
and p.start_time <= c.start_time
and p.end_time >= c.end_time
);
不是完美的解决方案,但可以工作。
这篇关于运行基于JavaScript的过程时检索子查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文