Есть два способа решения этой проблемы.
Первый подход состоит в том, чтобы «исправить» ошибку области, включив checklist()
в спецификацию пакета (что делает его опубликованным c и, таким образом, на него может ссылаться любая процедура, определенная в теле) или с помощью отправьте декларацию для определения процедур в верхней части тела пакета (что позволяет последующим процедурам ссылаться на них независимо от порядка, в котором написаны процедуры). Это решения, предоставленные @ hotfix .
Однако есть проблема с этим подходом: ваш код выполняет рекурсивный l oop, как это
Checklist -> Task -> Step Checklist -> Checklist
Так что вы должны что-то кодировать в checklist()
или step checklist()
который разрывает цикл и раскручивает код. Для этого нужно сделать красный флаг, что говорит о том, что в вашем дизайне что-то не так
Следовательно, второй подход заключается в том, чтобы сделать шаг назад и рассмотреть, есть ли другой способ реализации вашей бизнес-логики c без зависимости cycli c. Зависимости Cycli c являются плохой вещью в архитектуре программного обеспечения, и их следует по возможности избегать Обычное решение состоит в том, чтобы изолировать общую зависимость - в этом случае операцию, которую нужно выполнить и checklist()
, и step checklist()
- и извлечь ее в новую подпрограмму. Затем измените обе процедуры, чтобы вызвать новую процедуру.
Это может быть легко или сложно достигнуть, в зависимости от характера общей зависимости: будет проще исправить чистый кусок кода и труднее исправить рекурсию в базовой модели данных. В любом случае стоит потратить время на удаление зависимости cycli c. Графики зависимостей Acycli c менее хрупкие, более понятные и простые в обслуживании.