我正在尝试使用没有任何第三方软件的查询来制作类似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编译错误。 *动作:
第二个挑战可能是:
这应该如何工作?
该脚本一旦执行,就应继续运行,而用户不要取消它,而应打印找到的所有查询。
答案 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;