Времена меняются. Новый код быстро становится устаревшим. А унаследованный код часто заменяется более качественным и быстрым кодом. Итак, вы осуждаете старый код.
Но это создает проблему:
Как остановить использование устаревших модулей?
Люди склонны придерживаться того, что знают. Даже после того, как вы неоднократно просили всех перейти на новый модуль, всегда есть (по крайней мере) один разработчик, который настаивает на использовании устаревшей процедуры вместо более новой, более яркой опции.
А в сложных приложениях сложно отследить, что устарело.
Это сложно решить.
Поэтому, чтобы помочь вам с процессом прекращения поддержки, мы ввели для этого новую прагму.
Чтобы использовать это, поместите
pragma deprecate ( deprecated_thing, 'Message to other developers' );
под пенсионным разделом.
Здорово. Но как это помогает?
Мы добавили несколько новых предупреждений PL / SQL: от PLW-6019 до PLW-6022. Включите их, и Oracle сообщит вам, используете ли вы устаревший код:
alter session set plsql_warnings = 'enable:(6019,6020,6021,6022)'; create or replace procedure your_old_code is pragma deprecate ( your_old_code, 'This is deprecated. Use new_code instead!' ); begin null; end your_old_code; / show err Warning(2,3): PLW-06019: entity YOUR_OLD_CODE is deprecated
Отлично. Но мы все всегда игнорировали предупреждение AUTHID DEFINER! Если код действительно устарел, было бы хорошо, если бы вы могли запретить людям использовать его все вместе.
К счастью, это возможно!
Вот что замечательно в предупреждениях. Вы можете обновить их до ошибок! PLW-6020 выдается, когда вы пишете код, вызывающий устаревший элемент. Установите для этого параметра значение error, и проблемный код не будет компилироваться:
alter session set plsql_warnings = 'error:6020'; create or replace procedure calling_old_code is begin your_old_code(); end calling_old_code; / show err 3/3 PLS-06020: reference to a deprecated entity: This is deprecated. Use new_code instead!
Конечно, если вы превратите PLW-6020 в систему с ошибками, многие вещи могут сломаться! Таким образом, вы можете выборочно обновлять его на заданных объектах:
alter procedure calling_old_code compile plsql_warnings = 'error:6020' reuse settings;
Итак, теперь у вас есть возможность заставить других перестать использовать доисторический код.
Полная статья изначально опубликована на сайте blogs.oracle.com 10 ноября 2016 г.