运行基于JavaScript的过程时检索子查询 [英] Retrieving Child Queries When We Run JavaScript Based Procedure

查看:16
本文介绍了运行基于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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆