Я пытаюсь создать что-то вроде профилировщика 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, если новые данные не найдены в старых данных?
Как это должно работать?
После выполнения этот скрипт должен продолжать работать, пока пользователь не отменит его, а затем распечатать все найденные запросы.