Ошибка PLS-00323 в оракуле - PullRequest
       12

Ошибка PLS-00323 в оракуле

9 голосов
/ 21 июля 2011

Я создаю процедуру в пакете.Я обновил спецификацию пакета, а затем, когда я обновляю тело пакета, он показывает мне следующую ошибку:

[Ошибка] PLS-00323 (314: 13): PLS-00323: подпрограмма или курсор «INSERT_CUSTOMER_ADDRESS» объявлен в спецификации пакета и должен быть определен в теле пакета

Примечание: INSERT_CUSTOMER_ADDRESS - это имя моей процедуры.

Ответы [ 4 ]

2 голосов
/ 25 июня 2014

Всегда объявление в спецификации pkg и теле pkg должно быть одинаковым.

Это означает, что процедура / функция, объявленная в спецификации pkg (включает в себя имя процедуры / функции, параметртип) должен быть точно таким же.

Примечание: когда oracle компилирует pkg для описанного выше случая ошибки, оно не даст вам точную строку №.

2 голосов
/ 21 июля 2011

Если вы создаете процедуру в спецификации пакета, она должна быть создана \ реализована в теле пакета.Рассматривайте спецификацию вашего пакета как интерфейс, а тело пакета - как его реализацию.

1 голос
/ 01 июля 2015

Поскольку чьи-то старые ошибки всегда являются новостью для меня, я добавлю свои 3 цента:

Кто-то удалил свою спецификацию, но все еще имел тело (Нет, я не знаю как), и они "не хотели вводить все это обратно".

Итак, я показал им, как генерировать спецификацию из тела:

  1. Скопируйте тело в рабочий лист.
  2. Вставьте пустой заголовок над телом с названием пакета.
  3. Compile.
  4. [Если вы получили ошибку или нет,] Щелкните правой кнопкой мыши тело пакета в дереве пакетов и выберите «Синхронизировать спецификацию и тело».
  5. Выберите объекты для отображения в спецификации и нажмите ОК.
  6. "волшебство происходит"

Только магии не произошло - и все стало красным ... с ошибками PLS-00323.

Разработчик SQL заполняет спецификацию пакета, извлекая заголовки процедур и функций из самого кода, поэтому вам не нужно беспокоиться о таких вещах. Он представляет список объектов, которые нужно добавить в пакет / спецификацию, и вы выбираете, какие из них добавить.

Мы выбрали правильные процедуры и функции, но они скомпилированы с ошибками. Снова. И снова.

Оказывается, что функции, которые генерировали ошибки, были определены в теле пакета с помощью DETERMINISTIC - когда редактор SQL Dev выполнил синхронизацию, он пропустил слово. Это довольно существенно.

Во всяком случае, пересмотрел, вставил DETERMINISTIC в определенные функции перед точкой с запятой, сохранил (перекомпилировал), и затем это снова стало волшебством.

Вы ожидаете, что SQL Developer выполнит всю работу вместо половины ... ... 1031 *

1 голос
/ 28 августа 2013

Спецификация: FUNCTION ITEM_ACTIVE ( SKU_NUM IN NUMBER) RETURN BOOLEAN;

Тело: FUNCTION ITEM_ACTIVE ( P_SKU_NUM IN NUMBER) RETURN BOOLEAN;

** Измените либо спецификацию, либо тело для точного соответствия.

HTH!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...