База данных Oracle, проверка кода pl/sql
Мне нужно было проверить, что конкретный объект pl/sql (скажем, процедура) соответствует между средой разработки, тестирования и производства. Чтобы сравнить и знать со 100% уверенностью, что код соответствует, я написал простую функцию, такую как эта:
function get_plsql_hash (p_owner varchar2, p_name varchar2, p_type varchar2) return number as
v_hash number;
begin
select sum(ora_hash(line||'!'||text)) into v_hash
from dba_source
where owner = p_owner
and name = p_name
and type = p_type;
if v_hash is null then
return 0;
else
return v_hash;
end if;
exception
when others then
return 0;
end get_plsql_hash;
Работает отлично. Если я изменю хотя бы один символ кода, я получу другое хеш-значение (контрольную сумму или как вы хотите ее назвать). Я могу использовать представления словаря Oracle не только для проверки кода pl/sql, но также для данных в ссылочных / справочных таблицах, структуре таблиц, таблицах, индексах, ограничениях, последовательностях и т. Д. Функция, которую я вставил выше, была лишь одним примером.
Вот мой вопрос... существует ли уже что-то в словаре данных Oracle, о котором я не знаю, что может дать мне уникальное значение, представляющее каждый объект? Было бы замечательно, если бы dba_objects имел столбец с именем OBJ_CKSUM или что-то подобное. Если бы Oracle мог хранить это внутренне каждый раз, когда объект был изменен, это полностью исключило бы необходимость в написанном мною коде (который составляет всего несколько сотен строк, но ноль строк без кода для сопровождения намного лучше). Если такой функции не существует, возможно, Oracle рассмотрит возможность ее добавления в будущем выпуске? Я думаю, что это очень полезно, но я не уверен, что другие разработчики, тестировщики или менеджмент релизов согласятся. Я не знаю, как продолжать запрашивать функцию у Oracle.