Какие ситуации заставляют пакеты Oracle становиться недопустимыми?

  1. Вам нужно установить для gameOver значение True, когда игрок умирает
  2. Вам также нужно добавить логику, чтобы изменить цикл while на false, чтобы выйти из цикла while.

Например, установите gameOver = true, когда currentHealth == 0 внутри цикла while, и установите while(gameOver == false)

.
8
задан Ólafur Waage 9 March 2009 в 13:39
поделиться

6 ответов

Изменение что-либо возражает, что пакет полагается (например, таблицы, представления, триггеры, другие пакеты) автоматически отметит пакет как недопустимый. Как tuinstoel примечания выше, Oracle достаточно умна для перекомпиляции пакета, когда она сначала используется.

Если Вы обеспокоены этим, каждый раз, когда Вы вносите изменения схемы (например, таблицы, представления, триггеры, процедуры), выполняете a DBMS_UTILITY.compile_schema (или имейте свой DBA, делают это). Это вызовет, компилируют все пакеты и сообщают, где, или если, существуют ошибки перед нахождением их твердым путем.

12
ответ дан 5 December 2019 в 06:24
поделиться

Я соглашаюсь с Thomas Jones-Low однако существует пара большего количества проблем, чтобы сделать с долгими сессиями и перекомпиляцией.

Если Вы сошлетесь на пакет на сессии, и тот пакет (или подчиненный пакет) перекомпилированы во время той же сессии затем, то Вы получите ошибочные РТЫ "оракула 06508: МН / SQL: не мог найти программный модуль названным"

После того как Вы сослались на пакет на сессии, Вы обычно не можете изменять пакет, не делая недействительным его для той сессии. Это - конкретная проблема для сред разработки, где пакеты часто изменяются, но также и проблема для продуктивных сред, где Вы хотите сделать маленький патч, не удаляя целую среду. Обратите внимание, что эта ошибка произойдет, даже когда нет никаких ошибок в измененных пакетах.

3
ответ дан 5 December 2019 в 06:24
поделиться

BTW, Если я абсолютно неправ относительно ситуации... извинения заранее

Пойманный врасплох?

Не уверенный, каковы последствия этого...

Что-то прерывало производство?

Что ТОЧНО произошло?

Причина, которую я спрашиваю, состоит в том, потому что понимание разветвлений каждого возможного изменения намного более трудно, чем контакт с результатом. Почему аннулирование становится проблемой? Мое предположение - то, потому что Вы добрались, "Существующее состояние Пакета было отброшено" ошибка в Вашем приложении. Это - РЕАЛЬНАЯ проблема?

Снова я подозреваю, что это и если так, позвольте нам просто иметь дело с этим вместо списка изменений, которые, поскольку я вставил комментарий, конкретная версия. (11 г разыскивают зависимость к столбцу таблицы вместо таблицы в целом, например).

Это не может походить на важную ошибку Вам, если Вы не используете состояние пакета. Если бы Вы были, то это было бы важной ошибкой, и Вы не были бы удивлены, таким образом, я предполагаю, что Вы не.

Так как Вы не эта ошибка, в порядке для игнорирования. Так как можно безопасно проигнорировать его, можно кодировать клиентское приложение, чтобы проигнорировать эту ошибку и повторить вызов, потому что, как другие указали, Oracle перекомпилирует пакет для Вас. Это - стоящее осуществление. Поскольку вместо того, чтобы знать каждую возможную вещь необходимо волноваться о том, когда Вы вносите изменение, и затем в чрезвычайной фиксации Вы забываете одного из тех, Ваше приложение будет просто обрабатывать его и идти дальше без беспокойства.

3
ответ дан 5 December 2019 в 06:24
поделиться

В дополнение к ответу Thomas Jones-Low, если Вы только изменяете основание корпуса, зависимый объект не мог бы быть отмечен как недопустимый.

Однако, как только Вы изменяете спецификацию пакета, которая обязана произойти.

2
ответ дан 5 December 2019 в 06:24
поделиться

Если попытка выполнить недопустимый пакет Oracle, Oracle попытается скомпилировать его. Только то, когда это остается недопустимым после компиляции Oracle, выдаст исключение.

1
ответ дан 5 December 2019 в 06:24
поделиться

Или вы можете запросить следующую таблицу, чтобы узнать, какие у вас зависимости.

   select *
   from dba_dependencies
   where name = 'YOUR_PACKAGE'
   and referenced_owner = 'ANYUSER' --- Comment this out if you are looking for yourself
   and owner = USER --- Or can be set to any user

Это покажет все зависимости. Для ваших объектов запросите user_dependencies.

5
ответ дан 5 December 2019 в 06:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: