четверг, 29 ноября 2007 г.
Новый сайт DaReManager.SourceForge.net
среда, 6 июня 2007 г.
Новый OpenSource проект
понедельник, 4 июня 2007 г.
Хранимые процедуры с переменным числом параметров
> SELECT my_function('123 AS param1, 456 AS param2, 789 AS param3');
Значения входящих параметров внутри функции можно получить, составив запросы в следующем виде:
> SELECT INTO l_param1 rec.param1 FROM (SELECT 123 AS param1, 456 AS param2, 789 AS param3) AS rec;
> SELECT INTO l_param2 rec.param2 FROM (SELECT 123 AS param1, 456 AS param2, 789 AS param3) AS rec;
> SELECT INTO l_param3 rec.param3 FROM (SELECT 123 AS param1, 456 AS param2, 789 AS param3) AS rec;
Подробнее описано здесь: http://docs.google.com/Doc?id=ddzmh9s3_87dgw9rn
Возможно, кому-то покажется странным такой метод, однако он весьма эффективен и проверен на практике в различных задачах.
суббота, 24 марта 2007 г.
Вычисление параметризованных выражений
f(a,b,c) = a + b + c + 1, где a, b и с произвольные параметры.
Если под рукой не оказалось готового инструмента для вычисления параметризованных выражений, в качестве калькулятора воспользуйтесь какой-нибудь СУБД и ее могучим языком запросов SQL.
Рассмотрим этапы построения SQL запроса для вычисления параметризованного выражения:
1. Предположим, что f(a,b,c) необходимо вычислить для a=2, b=4 и с=6. Составим запрос:
> SELECT 2 AS a, 4 AS b, 6 AS c;
Получим таблицу значений входящих параметров:
+-----------+
| a | b | c |
+-----------+
| 2 | 4 | 6 |
+-----------+
2. Доработаем запрос:
> SELECT b FROM (SELECT 2 AS a, 4 AS b, 6 AS c) AS params;
Получим значение отдельного параметра:
+---+
| b |
+---+
| 4 |
+---+
3. Наконец, составим запрос, вычисляющий наше выражение:
> SELECT a + b + c + 1 AS result FROM (SELECT 2 AS a, 4 AS b, 6 AS c) AS params;
Получим результат:
+--------+
| result |
+--------+
| 13 |
+--------+
Остается только добавить, что использовать СУБД в качестве калькулятора можно для различных типов данных (числовых, логических, строковых, даты и тд.). Особенно интересны комбинированные выражения. Например на запрос:
> SELECT a OR (b = c) AS result
FROM (SELECT false AS a, 4 AS b, 6 AS c) AS params;
СУБД вернет нам:
+--------+
| result |
+--------+
| false |
+--------+
Приведенный пример работает в СУБД PostgreSQL, MySQL, SQLite и др.
воскресенье, 18 марта 2007 г.
Идеальное решение
Возникла как-то проблема со справочником контрагентов. Некоторых заказчиков и поставщиков пользователи регистрировали несколько раз под разными наименованиями. Как следствие, расползлись дебиторская и кредиторская задолженности, не собирались карточки контрагентов и тд. Проблема распространенная, особенно в торговых фирмах.
Решение проблемы очевидное, передать все права на регистрацию новых заказчиков и поставщиков специалисту в одни руки. Я кратко изложил эту идею в статье «Уникальность контрагентов».
После выпуска статьи прошло несколько трудовых лет. Идеальное на мой взгляд решение (не путать с гениальным) внедрить так и не удалось. По-прежнему у нас появляются дубляжи контрагентов. Пользователи продолжают спорить и ругаться из-за замусоренного справочника.
Причин может быть несколько, но основная видится одна – всем так удобнее. Программистам не нужно усложнять компьютерную программу. Пользователям не нужно пересматривать бизнес процессы.
четверг, 15 марта 2007 г.
Первый пост
Как-то не оригинально получилось, но это только начало...........................