没有第三方软件的Oracle Profiler

时间:2019-04-11 12:55:43

标签: oracle

我正在尝试使用没有任何第三方软件的查询来制作类似T-SQL探查器的东西。

首先,我有用于执行当前执行的查询的代码:

select x.sid
,sql_text
from   v$sqlarea sqlarea
,v$session x
where  x.sql_hash_value = sqlarea.hash_value
and    x.sql_address    = sqlarea.address
and    x.username = 'USERNAME';

现在我发现了两个挑战:

当我将此代码放入while循环中时,出现错误:

 DECLARE
  x NUMBER := 0;
BEGIN
  LOOP
         select x.sid
         ,sql_text
         from   v$sqlarea sqlarea
        ,v$session x
         where  x.sql_hash_value = sqlarea.hash_value
         and    x.sql_address    = sqlarea.address
         and    x.username = 'MAGICAPP';
    EXIT WHEN x > 1;
  END LOOP;
END;
  

错误报告-ORA-06550:第5行,第10列:PLS-00428:INTO子句   应该在此SELECT语句中   06550。00000-“%s行,%s列:\ n%s”   *原因:通常是PL / SQL编译错误。   *动作:

第二个挑战可能是:

  • 即使上面的代码有效,它也会通过SELECT语句不断用新数据刷新旧数据。如果在旧数据中找不到新数据,是否可以使用SELECT语句将新数据追加到旧数据中?

这应该如何工作?

该脚本一旦执行,就应继续运行,而用户不要取消它,而应打印找到的所有查询。

1 个答案:

答案 0 :(得分:1)

对于具体的错误,您需要一个INTO来选择值INTO变量,例如:

 DECLARE
  x NUMBER := 0;
  txt VARCHAR2(4000);
BEGIN
  LOOP
         select x.sid,sql_text
         INTO   x, txt
         from   v$sqlarea sqlarea
        ,v$session x
         where  x.sql_hash_value = sqlarea.hash_value
         and    x.sql_address    = sqlarea.address
         and    x.username = 'MAGICAPP';
    EXIT WHEN x > 1;
  END LOOP;
END;