Не найдя хорошего решения, я написал небольшой скрипт давным-давно, загрузив данные из спецификации 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.
Я не уверен, контролирует ли исходный плакат все еще это, но я задам вопрос так или иначе.
Исходное сообщение запросило смочь к:
Чтобы автоматически "заблокировать" текущую процедуру, Вы работаете с, таким образом, никто больше в команде не может внести изменения в нее, пока Вы не закончены.
Возможно, проблемой здесь является одна из парадигмы разработки больше, чем неспособность продукта "заблокировать" сохраненный proc. Каждый раз, когда я слышу, что "Хочу заблокировать это так, никто еще не изменяет его", я сразу получаю чувство, что люди совместно используют схему, и все разрабатывают в том же пространстве.
Если это верно, почему не просто позволенный все иметь их собственную схему с копией модели данных? Я имею в виду серьезно людей, это не "стоит" ничего для создания другой схемы. Тем путем каждый разработчик может внести изменения, пока они не посинели, не влияя ни на кого больше.
Другой прием, который я использовал в прошлом (в малочисленных командах), когда не было выполнимо позволить каждому разработчику иметь их собственную копию данных из-за размера, должен был иметь основную схему со всеми таблицами и код в ней с общедоступными синонимами, указывающими на все это. Затем если разработчик хочет работать над сохраненным proc, он просто создает его в своей схеме. Тем путем определение имен Oracle находит что одно первое вместо копии в основной схеме, позволяя им протестировать их код, не влияя ни на кого больше. Это действительно имеет, это - недостатки, но это было очень конкретным случаем, где мы могли жить с ними. Я никогда не реализовывал бы что-то вроде этого в производстве, очевидно.
Что касается второго требования:
Для автоматической отправки изменений, Вы делаете в хранимой процедуре, в базе данных Oracle, к Подверсии, CVS... репозиторий
Я был бы удивлен найти инструменты там достаточно умными, чтобы сделать это (возможно, возможность :). Это должно было бы соединиться с Вашим дб, запросить словарь данных (USER_SOURCE) и вытащить связанный текст. Трудная задача для систем управления исходным кодом, где почти универсально базирующийся файл.
У нового Разработчика SQL Oracle есть встроенное управление версиями.
Вот ссылка на продукт.
http://www.oracle.com/technology/products/database/sql_developer/files/what_is_sqldev.html
Относительно простое (если немного старомодный) решение могло бы быть должно использовать систему управления версиями режима "блокировки" а не "слияния".... Подверсия или CVS обычно используют режим "слияния" (хотя я полагаю, что Подверсия может быть сделана "заблокировать" файлы?)
Системы управления версиями режима "Locking" действительно имеют свои собственные недостатки, конечно.....
Единственным путем я могу думать о выполнении в Oracle, могла бы быть часть из ПЕРЕД CREATE TRIGGER, возможно, сославшись на таблицу к поиску, кто может выполнить пакет в. Звучит немного противным хотя?
Рассматривайте МН / SQL как обычный код: сохраните его в файлах и управляйте этими файлами с Вашим инструментом управления версиями и Вашими внутренними процедурами.
Если Вы уже не имеете инструмента управления версиями, то записываете Ваши требования и берете то. Много людей, это кажется Подверсией использования, связанной с TortoiseSVN как клиент в Windows (я делаю).
Вещь: используйте как есть свой инструмент, рекомендуемый, и адаптируйте свои процедуры соответственно. Например, Подверсия использует copy-modify-merge модель по умолчанию, в противоположность lock-modify-unlock модели, которую Вы, кажется, одобряете.
В моем случае мне нравится использовать TortoiseSVN, как указано выше. И как обычно с этим инструментом:
И безотносительно Вашего выбора, я рекомендую читать это сообщение (и связанные) об управлении версиями базы данных.
Можно также хотеть посмотреть на Data Studio Воды. Они создали в SVN также, и великий Сохраненный редактор Proc.
Используя Oracle Разработчик SQL 1.5, можно легко создать и управлять подключениями к CVS или Подверсии. Для создания соединения CVS (например), нажмите Versioning-> CVS-> Модуль Выезда. Вы пробежите мастер для создания соединения (хост, имя пользователя, и т.д.), затем можно проверить процедуры/функции и в как нормальные.
Интеграция с CVS также обеспечивается у Жабы.
После неудачных поисков инструмента для управления версиями объектов Oracle мы создали следующее (не идеальное, но подходящее) решение:
Вот наиболее важный запрос для шага 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 будут медленными процессы. (несколько минут для нескольких тысяч файлов)