Можно ли определить, какие объекты базы данных были созданы с идентификаторами в кавычках в Oracle?

У меня есть схема, в которой небольшое количество тысяч хранимых процедур было создано с идентификаторами в кавычках. Мне нужно их исправить. Единственный способ, которым я сейчас могу их идентифицировать, - это открыть их в SQLDeveloper, по одному, и проверить, CREATE OR REPLACE... бит вверху имеет кавычки вокруг имени процедуры. У кого-нибудь есть какой-нибудь хитрый способ более легко идентифицировать эти проблемные объекты? Я пропустил некоторое представление системы Oracle с this_uses_quoted_identifiers флаг, возможно? Пожалуйста, просветите меня!

2 ответа

Решение

Есть как минимум 2 способа:

select * from all_source where type = 'PROCEDURE' and line = 1 and text like '%"%'

а также

select * from all_procedures where procedure_name != upper(procedure_name)

Однако ни один из них не является на 100% правильным и полным. Первый ищет двойные кавычки в первой строке. Второй найдет только процедуры с более низкими заглавными буквами в названии, что будет означать, что используются двойные кавычки.

Насколько я знаю, если вы цитируете идентификатор, но все буквы в заглавной форме, это просто эквивалент не заключенного в кавычки идентификатора. Таким образом, вы можете выбрать из ALL_OBJECTS, чтобы увидеть, какие имена объектов имеют имена с заглавными буквами.

Другие вопросы по тегам