Я пытаюсь выполнить поиск без учета регистра и пробелов в столбце SQL_FULLTEXT V $ SQLSTAT , чтобы найти SQL_ID, связанный с данным sql. Мое решение слишком неэффективно.
Я ограничил поиск первыми 1000 символами, просто чтобы попытаться сделать это быстрее, но все еще очень медленно.
DECLARE
given_sql CLOB;
id VARCHAR2(13);
smaller_sql VARCHAR2(1000);
replace_chars VARCHAR2(6);
BEGIN
given_sql:= 'long sql statement'
-- whitespace characters used in TRANSLATE
replace_chars:= chr(32) || chr(9) || chr(10) || chr(11) || chr(12) || chr(13);
-- taking substring of given_sql
smaller_sql:= dbms_lob.substr(given_sql, 1000, 1);
-- Calling translate to remove extra whitespace and then calling LOWER()
smaller_sql:= LOWER(TRANSLATE(smaller_sql, replace_chars, ' '));
-- In the WHERE clause I apply the same process that I applied to smaller_sql to the
-- SQL_FULLTEXT column.
SELECT SQL_ID INTO ID
FROM V$SQLSTATS stats
WHERE dbms_lob.compare(LOWER(TRANSLATE(dbms_lob.substr(SQL_FULLTEXT, 1000, 1), replace_chars, ' ')), smaller_sql) = 0;
dbms_output.put_line(ID);
END;
По сути, я хочуэффективный пробел и поиск по столбцу CLOB без учета регистра.
Спасибо за помощь.