Инструменты для работы с хранимыми процедурами в Oracle, в команде?

Не найдя хорошего решения, я написал небольшой скрипт давным-давно, загрузив данные из спецификации unicode (v.5.0.0) и генерируя интервалы для каждой категории юникода и подкатегории в BMP (в последнее время вместо была использована небольшая программа Java , которая использует свою собственную поддержку Unicode).

В основном он преобразует \p{...} в диапазон значений, очень похожий на выход инструмента , упомянутый Томалаком, но интервалы могут оказаться довольно большими (поскольку он не имеет дело с блоками, а с символами, разбросанными по многим различным местам).

Например, Regex, написанное так:

var regex = unicode_hack(/\p{L}(\p{L}|\p{Nd})*/g);

Будет преобразовано в нечто подобное:

/[\u0041-\u005a\u0061-\u007a...]([...]|[\u0030-\u0039\u0660-\u0669...])*/g

Не использовали его много в но, похоже, он отлично работает на моих тестах, поэтому я публикую здесь, если кто-то найдет это полезным. Несмотря на длину результирующих выражений (пример выше имеет 3591 символ при расширении), производительность кажется приемлемой (см. тесты в jsFiddle, благодаря @modiX и @Lwangaman для улучшения).

Вот источник (raw, 27.5KB; minified , 24.9KB, не намного лучше ...). Это может быть уменьшено за счет отмены символов Unicode, но OTOH будет подвергать риску проблемы с кодировкой, поэтому я ухожу, как есть. Надеюсь, что с ES6 этот вид больше не понадобится.

Обновление: это похоже на ту же стратегию, которая была принята в плагине XRegExp Unicode , упомянутом Тимом Дауном, кроме что в этом случае используются регулярные выражения JavaScript.

12
задан Mac 2 April 2009 в 14:58
поделиться

8 ответов

Я не уверен, контролирует ли исходный плакат все еще это, но я задам вопрос так или иначе.

Исходное сообщение запросило смочь к:

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

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

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

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

Что касается второго требования:

Для автоматической отправки изменений, Вы делаете в хранимой процедуре, в базе данных Oracle, к Подверсии, CVS... репозиторий

Я был бы удивлен найти инструменты там достаточно умными, чтобы сделать это (возможно, возможность :). Это должно было бы соединиться с Вашим дб, запросить словарь данных (USER_SOURCE) и вытащить связанный текст. Трудная задача для систем управления исходным кодом, где почти универсально базирующийся файл.

9
ответ дан 2 December 2019 в 21:04
поделиться
2
ответ дан 2 December 2019 в 21:04
поделиться

Относительно простое (если немного старомодный) решение могло бы быть должно использовать систему управления версиями режима "блокировки" а не "слияния".... Подверсия или CVS обычно используют режим "слияния" (хотя я полагаю, что Подверсия может быть сделана "заблокировать" файлы?)

Системы управления версиями режима "Locking" действительно имеют свои собственные недостатки, конечно.....

Единственным путем я могу думать о выполнении в Oracle, могла бы быть часть из ПЕРЕД CREATE TRIGGER, возможно, сославшись на таблицу к поиску, кто может выполнить пакет в. Звучит немного противным хотя?

1
ответ дан 2 December 2019 в 21:04
поделиться

Рассматривайте МН / SQL как обычный код: сохраните его в файлах и управляйте этими файлами с Вашим инструментом управления версиями и Вашими внутренними процедурами.

Если Вы уже не имеете инструмента управления версиями, то записываете Ваши требования и берете то. Много людей, это кажется Подверсией использования, связанной с TortoiseSVN как клиент в Windows (я делаю).

Вещь: используйте как есть свой инструмент, рекомендуемый, и адаптируйте свои процедуры соответственно. Например, Подверсия использует copy-modify-merge модель по умолчанию, в противоположность lock-modify-unlock модели, которую Вы, кажется, одобряете.

В моем случае мне нравится использовать TortoiseSVN, как указано выше. И как обычно с этим инструментом:

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

И безотносительно Вашего выбора, я рекомендую читать это сообщение (и связанные) об управлении версиями базы данных.

2
ответ дан 2 December 2019 в 21:04
поделиться

Можно также хотеть посмотреть на Data Studio Воды. Они создали в SVN также, и великий Сохраненный редактор Proc.

0
ответ дан 2 December 2019 в 21:04
поделиться

Используя Oracle Разработчик SQL 1.5, можно легко создать и управлять подключениями к CVS или Подверсии. Для создания соединения CVS (например), нажмите Versioning-> CVS-> Модуль Выезда. Вы пробежите мастер для создания соединения (хост, имя пользователя, и т.д.), затем можно проверить процедуры/функции и в как нормальные.

Интеграция с CVS также обеспечивается у Жабы.

0
ответ дан 2 December 2019 в 21:04
поделиться

Жаба также делает это, не требуя CVS / SVN.

-1
ответ дан 2 December 2019 в 21:04
поделиться

После неудачных поисков инструмента для управления версиями объектов Oracle мы создали следующее (не идеальное, но подходящее) решение:

  1. Используя пакет dbms_metadata , мы создать дамп метаданных нашего сервера Oracle. Мы создаем один файл для каждого объекта, поэтому в результате получается не один огромный файл, а группа файлов. Для распознавания удаленного объекта мы удаляем все файлы перед повторным созданием дампа.
  2. Мы копируем все файлы с сервера на клиентский компьютер.
  3. Используя Netbeans, мы распознаем изменения и фиксируем изменения на сервере CVS ( или проверьте различия ...). Здесь может работать любое программное обеспечение CVS-обработчика, но мы уже использовали Netbeans для других целей. И Netbeans также позволяет создать задачу ant для вызова процесса Oracle, упомянутого в шаге 1, копирование файлов, упомянутых на шаге 2 ...

Вот наиболее важный запрос для шага 1:

SELECT object_type, object_name, 
  dbms_metadata.get_ddl(object_type, object_name) object_ddl FROM user_objects
WHERE OBJECT_TYPE in ('INDEX', 'TRIGGER', 'TABLE', 'VIEW', 'PACKAGE', 
  'FUNCTION', 'PROCEDURE', 'SYNONYM', 'TYPE')  
ORDER BY OBJECT_TYPE, OBJECT_NAME

Подход «один файл на объект» помогает идентифицировать изменения. Если я добавлю поле в таблицу TTTT (конечно, не настоящее имя таблицы), то будет изменен только файл TABLE_TTTT.SQL .

Шаг 1 и шаг 3 будут медленными процессы. (несколько минут для нескольких тысяч файлов)

0
ответ дан 2 December 2019 в 21:04
поделиться
Другие вопросы по тегам:

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