сегодня случилось странное. стала вылетать ошибка невалидности пакета, который, судя по свн не менялся уже несколько лет. соответственно наверное ничего в нем не менялось и на продакте. обновил — ошибка исчезла. что могло привести к тому что он стал невалидным, учитывая что я единственный кто мог чего-то в нем поменять? сисадмины какие-то манипуляции с базой могли провести для такого эффекта?
W>Самого пакета или тела (package body)? И в какой момент?
я просто пишу по памяти. дома оракла нет да и врядли бы повторил ошибку.
invalid package body вроде.
W>P.S. Ставь, пожалуйста, тег используемой СУБД. А также постарайся давать темам информативные имена. Например, включить в название текст ошибки.
Здравствуйте, Kaifa, Вы писали:
W>>Самого пакета или тела (package body)? И в какой момент?
K>я просто пишу по памяти. дома оракла нет да и врядли бы повторил ошибку. K>invalid package body вроде.
Мог быть изменен пакет от которого зависит пакет ставший невалидным. Например, добавлен еще один параметр в функцию вызываемую из невалидного пакета.
Попробуйте его перекомпилировать и все увидите по тексту ошибки.
BE>Мог быть изменен пакет от которого зависит пакет ставший невалидным. Например, добавлен еще один параметр в функцию вызываемую из невалидного пакета. BE>Попробуйте его перекомпилировать и все увидите по тексту ошибки.
Если пакет завит от другого пакета и в последнем произведены изменения
Добавили функцию/процедуру в спецификацию пакета не в конец, а где-то в середину. Или изменили параметры вызова у существующих,
То получите инвалидизацию.
Рекомендации — добавлять функции и процедуры в конец пакета.
Так же возможна инвалидизация, если пакет зависит от таблицы, которую изменили по структуре.
Рекомендации использовать представления.
Здравствуйте, IZM, Вы писали:
IZM>Если пакет завит от другого пакета и в последнем произведены изменения
т.к. с этой системой работаю только я, то врядли менялось что-то. я грешу на админов. интересно только что они могли сделать.
кстати. на кой хрен вообще ввели эту концепцию пакетов? ведь такой бардак получается в итоге. особенно если без стандартизации плодить эти пакеты на протяжении многих лет.
в мс сиквеле в этом плане все прозрачно... в общем все больше и больше матерю этот оракл по мере изучения. раздача прав — вообще что-то с чем-то. давайте еще права на каждую колонку выдавать... что за паранойя? это вообще хоть раз использовалось кем-то на практике? идиотизм полнейший. разделение пл сиквел и сиквел — вообще полнейший маразм. к постгри это тоже относится. майкрософт все же молодцы. хоть изначально это и не их разработка.
K>кстати. на кой хрен вообще ввели эту концепцию пакетов? ведь такой бардак получается в итоге. особенно если без стандартизации плодить эти пакеты на протяжении многих лет.
А что лучше чтоб валялась куча процедур и функций? вот тогда точно будет полный бардак. и это Вам никто не запрещает делать — не плодите пакеты и все.
На много удобнее когда функции и процедуры относящиеся к определенным задачам лежат в одном месте (как вариант для не любителей пакетов — использовать разные схемы, но там будут опять же претензии к раздаче прав).
раздать права на много функций и процедур намного трудозатратнее чем на пакет.
В пакете можно реализовывать полиморфизм (перегрузку функций и процедур).
Можете формировать глобальные переменные (значение которых ,например, использовать в одной сессии)
Вообщем там много чего полезного, относительно отдельных функций и процедур.
K>в мс сиквеле в этом плане все прозрачно... в общем все больше и больше матерю этот оракл по мере изучения. раздача прав — вообще что-то с чем-то. давайте еще права на каждую колонку выдавать... что за паранойя? это вообще хоть раз использовалось кем-то на практике? идиотизм полнейший. разделение пл сиквел и сиквел — вообще полнейший маразм. к постгри это тоже относится. майкрософт все же молодцы. хоть изначально это и не их разработка.
Не хотите раздавать права — работайте в одной схеме и Сonnect к БД делайте от имени схемы — никаких раздач прав не потребуется.
Раздача прав на колонку — это очень полезная вещь ,например, есть у Вас таблица, а значения колонок некоторых вы не желаете показывать некоторым личностям (Найти применение проблем нету)
Разделение на Pl/Sql и Sql — каждый движок оптимизирован под свои задачи, так что свои плюсы есть.
поработаете — полюбите у всех свои плюсы и минусы.
Мне, например, У FireBird нравятся некоторые фишки — к процедурам можно обращаться как к таблицам (они там могут табличный вывод делать), в Оracle приходится возвращать табличный тип для такой реализации и куда больше кода писать.
K>т.к. с этой системой работаю только я, то врядли менялось что-то. я грешу на админов. интересно только что они могли сделать. K>кстати. на кой хрен вообще ввели эту концепцию пакетов? ведь такой бардак получается в итоге. особенно если без стандартизации плодить эти пакеты на протяжении многих лет.
(Назидательно) Если выпить достаточно много из бутылки с надписью "Яд", скорее всего почувствуешь себя не очень хорошо. Алиса в стране чудес.
Если делать что угодно абы как на протяжении многих лет — наверняка будет бардак.
Пакеты — очень удобная штука. Логическое объединение связанных по смыслу процедур и функций, переменные уровня пакета и т.д.