Коля @SbWereWolf
программист эникейщик
Информация
- В рейтинге
- Не участвует
- Откуда
- Екатеринбург, Свердловская обл., Россия
- Дата рождения
- Зарегистрирован
- Активность
Специализация
Backend Developer, Software Architect
Senior
От 3 000 $
SQL
PHP
Laravel
Docker
Git
OOP
.NET
XML
PostgreSQL
MySQL
Отличная офисная мышь :)) в StareConflict-е тоже не подводит, люблю её.
На работу такую же собираюсь купить.
При желании на три доп. кнопки можно какие то вещи повешать, но это рюшечки, и без них живётся хорошо.
Три доп копки, умножить ан 5 режимов, получаем 15 дополнительных функций, всё что хочешь можно забиндить, и не к чему из мышки делать вторую цифровую клавиатуру.
В стратегическом плане конечно код будет в SVN / Mercurial храниться, опять же не раньше чем мне кто то выделит недельку на изучение этой темы применительно к СУБД ( PL/SQL Developer типа умеет работать с SVN, dbForge вообще с чем угодно, но что и как пока у нас ни кто не разбирался ).
Конечно у нас есть тестовый сервер, у нас даже есть сервер разработки, схема работы конечно такая: DEV — TEST — PROD.
Про "good practices" ни чего не слышал, мы в своей работе руководствуемся "best practices" :)
Oracle-based EPR из коробки с 20-летней историей — это Парус.
"Экземпляров" Паруса у нас кстати два, один клиент это завод с дискретным производством, другой клиент — продаёт услуги, у каждого своя специфика и за 10+ лет чуть более чем полностью переписанный функционал, так что от Паруса — там только название осталось.
Может быть это не Oracle что то кэширует в сессии, а клиент ERP системы, и пока ERP клиент работает с устаревшими данными у пользователя происходят ошибки.
"alter session set current_schema=" — прикольно, это наверное и есть тот нюанс о котором знает "TOAD", но которого не знаю я.
"При этом, возможно, исходник возьмется из source ?" — без понятия, для себя я эту задачу решил и дополнительно тратить на неё время пока не хочется.
Мой опыт это год работы на Oracle 10g, за это время мы базу раз 10 роняли, раз на раз не приходиться, почему так — я не вникал.
Собственно компиляция выполняется через "API" сервера, что бы сервер сам как ему надо все вопросы разрулил, и вообще был в курсе что у него исходники поменялись.
Пока не произошло компиляции ( CREATE OR REPLACE ) объекты себя ведут как всегда :)
После компиляции в некоторых сессиях могут вызываться старые версии объектов, поэтому если у пользователя что то "глючит", то ему просто надо перелогинится.
Не dbms_utility.COMPILE_SCHEMA — потому что это имело бы смысл при прямом изменении исходников в таблице SYS.SOURCE$, но мне не по себе от такого вмешательства в лоб.
Но конечно после того как все исходники будут обработаны — будет какое то количество INVALID объектов, поэтому как завершающий этап dbms_utility.COMPILE_SCHEMA — будет верным шагом, можно добавить в конец процедуры P_EXECUTE_CODE_UPDATE.
и т.п.
я пишу в статье:
MSDN пишет:
что я упустил? у меня что количество колонок, что количество разделов в пределах десятка, мне надо тупо перебрать записи как элементы массива, зачем мне индексы? в чём я не прав?
В том что вы игнорируете описанные нюансы и настаиваете на единственно верном решении?
в нашем с вами обсуждении табличных переменных мы выяснили, что они бывают двух разных видов:
Теперь почитаем, что
в своём коменте пишет:
мой перевод «оптимизированные для памяти сильно отличаются от тех которые обсуждаются ниже, подробности по ссылке»,
перейдём по ссылку, и увидим:
Мой перевод: «Эти переменных истинно в памяти, они гарантировано ни когда не скидываются на диск»
поэтому касательно моей комента к коду, за который вы меня мурыжите:
```sql
/* очищаем табличную переменную — освобождаем оперативную память */
```
можно сказать следующее:
а теперь вернёмся к:
Который касается вашей адекватности, я о себе пишу:
Но вы из контекста статьи вырываете отдельные части и относитесь к моим словам как к изречению гуру по T-SQL.
А потом понеслось «в Интернете кто то не прав» :))
Надо оно вам?
можно поиграться с кодом :
но этом нам даст только, то что "DELETE " это единственный способ удалить записи из табличной переменной.
из моего списка "литературы" идём по ссылке Temporary Tables
находим текст :
теперь курим MSDN
оказывается табличные переменные бывают двух типов:
Memory-optimized должны быть объявлены с использованием пользовательского типа, пример:
ок.
справедливость восстановлена?
Не суть. Когда мне надо будет по работе писать много T-SQL кода, тогда и разберёмся.
Не знаю какой хороший инструментарий для MS SQL, а для Oracle я пользуюсь PL/SQL Developer и TOAD, мне хватает, dbForge — только как форматировщик.
ЗЫ
ссылку на dbForge я даю в своём списке ссылок, вы до этого места видимо не дочитали?
у меня в коде есть комментарий который поясняет этот момент — с правильным использование курсоров в T-SQL не было времени разбираться, это согласитесь не на пол часа занятие.
Получить набор данных и спокойно с ним работать, не парясь ни за какие нюансы — на мой вкус это хорошая практика.
Кто то пишет супер оптимизированный код, кто то пишет много элементарного атомарного кода — мне ближе второй подход, с точки сопровождения это более удобный вариант.
я привожу ссылку Временные таблицы на статью про временные таблицы и табличные переменные, там написано, что табличная переменная живёт только в оперативке, на stack overflow пишут, что дропнуть табличную переменную нельзя, потому что её на жёстком диске нет, это как бы намекает что табличные переменные в tempdb не пишутся.
Кто из вас прав выясняйте без меня.
Два простых примера — простейший рефакторинг — переименовать переменную — переименовывает во всём документе, до и после DECLARE этой переменной, то есть переименовывает там где заведомо делать этого не надо, при этом если вызвать переименование не на DECLARE, а просто в коде то как раз про DECLARE dbForge забудет.
Второе — а) генерация тестового набора данных( описано в статье ) — не генерил значение внешнего ключа, пришлось руками доделывать, б) при наборе записей больше 16 000 скрипт вставки данных превращался в венегрет, который конечно можно было распутать, но желания нет, в) Если задать генерацию справочника ( 10 записей ) и данных ( 10 000 записей ), то генерил данных ровно столько же сколько записей в справочнике, вместо 10 000 записей в таблице данных, всего 10.
"dbForge Studio" несомненно отличный продукт, если знать где раскиданы грабли.
Единственное что в нём отлично работает это форматировщик, у которого очень гибкие настройки, но и его порой заставить работать без бубна не получается.
на мой вкус dbForge — сырой продукт. и спорить с вами о вкусах я не буду.
Пользователи всегда заинтересованы в скорейшем выполнении своей заявки, техподдержка без дела не сидит и любая самая пустячная заявка которая может подождать неделю — эту неделю ждать и будет. Поэтому если у пользователя есть способ своими руками сделать быстрее, то он сделает и часто пользователи не сообщают о системных ошибках которые исправляются за пару минут, потому что им дольше техподдержке объяснять в чём дело, чем исправить.
Если клиенты пользуются сервисом в качестве облачного, то такой способ хранения формул просто облегчает работу программиста — нет необходимости иметь отдельную хранимую процедуру под каждого пользователя.
При ошибке в формуле, отчёт не построиться или если будет адекватная обработка ошибок, то отдельные формулы не будут вычислены.
Основная идея — упрощение сопровождения.
Написать движок который строит произвольную таблицу не трудно, я подобный для веба уже писал .
Сегодня начал писать примитивную реализацию своей идеи, думаю к 10 марта допишу, будет время прикручу вывод отчёта на вебе.
По поводу "выражений"- можно много чего "накрутить", я просто поделился идеей. Для своих задач вы можете развить из этой идеи любой рабочий механизм.
Просто часто по работе изучая "best practices" я часто на Хабре находил отличные решения, поэтому почему бы не поделиться? Если кому то пригодиться я буду рад.