пятница, 27 декабря 2013 г.

До скольки можно посчитать на пальцах?

Для определенности, договоримся, что будем вести счет на пальцах, разгибая изначально собранные в кулак пальцы. Этот способ практически равноценен загибанию пальцев, но более нагляден на иллюстрациях. Итак, пальцы собраны в кулак - ноль, один палец распрямлен - один! и т.д.

До скольки же можно посчитать на пальцах двух рук?

среда, 18 декабря 2013 г.

Oracle SQL, штуки и трюки

Это рассказ о некоторых возможностях и трюках в Oracle SQL, которые привлекли мое внимание за последнее время. Некоторые почти бесполезны, но показались мне любопытными, другие - часто пригождаются в работе.

воскресенье, 8 декабря 2013 г.

Oracle SQL MERGE

Команда MERGE появилась в версии 9 СУБД Oracle и была усовершенствована в версии 10. Команда не делает ничего такого, чего нельзя сделать с помощью традиционных UPDATE, INSERTDELETE), но в ряде случаев делает это эффективнее.

Синтаксис команды MERGE:

MERGE INTO target_table
    USING source_table | source_view | source_subquery
    ON condition
[WHEN MATCHED THEN
    UPDATE SET ... [where_clause]
    [DELETE where_clause]]
[WHEN NOT MATCHED THEN
    INSERT ... [where_clause]]

четверг, 28 ноября 2013 г.

Всемирный заговор девятипалых

Все слышали, что десятичной системе счисления мы обязаны десяти пальцам на руках? Сегодня я продемонстрирую противоречие, скрытое в этом утверждении, и разоблачу всемирный заговор девятипалых!

среда, 27 ноября 2013 г.

Как работать с LDAP в PL/SQL, часть II

В первой части статьи я начал рассматривать работу с Active Directory сервером на языке PL/SQL с использованием пакета dbms_ldap. Были разобраны аутентификация, операция поиска, и написаны хранимые функция и процедуры ldap_open, ldap_print и ldap_search_and_print для облегчения дальнейшей работы. В данной статье будут рассмотрены операции модификации данных в LDAP каталоге, и попутно создан пакет ldap_helper на базе ранее написанных и новых PL/SQL функций и процедур.

воскресенье, 17 ноября 2013 г.

Как работать с LDAP в PL/SQL, часть I

Недавно я написал о том, что такое LDAP и с чем его едят. Сегодня, в продолжение этой темы, расскажу, как работать с LDAP сервером из программы на языке PL/SQL. Для создания примеров я использую Oracle 11gR2 и MS Active Directory. В примерах все имена организаций, подразделений и пользователей являются вымышленными, а всякое совпадение с реальностью совершенно случайно :)

Для работы с LDAP на PL/SQL Oracle предоставляет пакет DBMS_LDAP (альтернативой может быть написание PL/SQL-оберток для JNDI). Пакет позволяет работать с различными LDAP-серверами, включая Oracle Internet Directory и Microsoft Active Directory.

воскресенье, 10 ноября 2013 г.

Как работать с LDAP в Python

Недавно я написал о том, что такое LDAP и с чем его едят. Сегодня, в продолжение этой темы, расскажу, как работать с LDAP сервером из программы на языке программирования Python. Для создания примеров я использую Python 2.7 и MS Active Directory. В примерах все имена организаций, подразделений и пользователей являются вымышленными, а всякое совпадение с реальностью является совершенно случайным :)

Для работы с LDAP из Python нам понадобится пакет python-ldap. Пакет позволяят работать с различными LDAP-серверами, и с Active Directory, в частности.

четверг, 31 октября 2013 г.

Что такое LDAP и с чем его едят

Эта статья - кратчайшее введение в LDAP и службы каталогов. Для иллюстрации излагаемого материала я буду пользоваться инструментом Softerra LDAP Browser, который можно свободно скачать с сайта производителя.

Концепцию служб каталогов и требования к их реализации определяет серия стандартов X.500 ITU-T. Здесь каталог - это специализированная база данных, оптимизированная для поиска и извлечения информации, также поддерживающая добавление и изменение данных.

среда, 16 октября 2013 г.

RANK, DENSE_RANK, FIRST и LAST в Oracle 11g

Функции RANK, DENSE_RANK, FIRST и LAST в СУБД в Oracle 11g могут использоваться как агрегатные и как аналитические.

Все эти функции имеют дело с ранжированием значений в некоторой выборке. По сути, все значения выборки упорядочиваются и им присваиваются номера таким образом, что первое значение получает номер 1, одинаковые значения получают одинаковые номера, последующие отличающиеся значения получают номера, большие предыдущих. Например,

значение  ранг
      13     1
      15     2
      15     2
      21     3
      22     4

суббота, 5 октября 2013 г.

Вперед к основам: ACID

В этой статье я проиллюстрирую требования к транзакционной системе, известные как ACID, примерами работы с СУБД Oracle. Попутно будут рассмотрены и проиллюстрированы примерами уровни изоляции транзакций.

Транзакционная система - это система, удовлетворяющая требованиям ACID. СУБД с поддержкой транзакций относятся к таковым. Требования ACID следующие:

Atomicity - атомарность
Транзакция либо применяется целиком, либо отменяется целиком.
Consistency - согласованность
Система находится в согласованном состоянии до начала транзакции и после завершения транзакции.
Isolation - изолированность
Внутри транзакции не видны изменения, сделанные в рамках другой непримененной транзакции.
Durability - долговечность
Результат примененной транзакции доступен после краха и восстановления системы.

суббота, 28 сентября 2013 г.

Вперед к основам: 1NF, 2NF, 3NF

Учитель сказал:
- Учиться и время от времени повторять изученное, разве это не приятно?

Конфуций, "Лунь Юй"

В нормализованной реляционной БД практически исключена избыточность данных. Это значит, что для изменения некоторого факта, хранимого в БД, достаточно только в одном месте добавить, удалить или модифицировать данные. Тем самым, нормализация БД способствует поддержанию целостности данных, снижая риск логических ошибок в процессе изменения данных. Кроме того, нормализованная схема данных с большой вероятностью адекватна предметной области, интуитивно понятна и расширяема.

В 1970 - 1971 годах Эдгар Кодд впервые сформулировал требования к нормализованным структурам данных, названные им нормальная форма 1, 2 и 3 (1NF, 2NF, 3NF). С тех пор были определены еще несколько нормальных форм, которые предъявляют дополнительные требования к организации данных в реляционной БД; о них можно прочитать, например, в статье Википедии.

Однако, в большинстве случаев достаточно обеспечить соответствие реляционной структуры данных 3-ей нормальной форме (3NF). Далее будут рассмотрены первые три нормальные формы, примеры их нарушения, сопутствующие этому проблемы и способы их решения.

суббота, 14 сентября 2013 г.

INSERT для нескольких таблиц в Oracle SQL. Часть II

В первой части статьи была рассмотрена работа многотабличной безусловной команды INSERT. Продолжим знакомство с командой INSERT, вставляющей строки одновременно в несколько таблиц, и поэкспериментируем с условным вариантом этой команды.

В многотабличных условных предложениях INSERT одной или нескольким частям INTO предшествует условие WHEN, которое и определяет, будут ли выполнены следующие за ним части INTO для каждой строки, возвращенной подзапросом.

среда, 4 сентября 2013 г.

INSERT для нескольких таблиц в Oracle SQL. Часть I

Понятно, что DELETE удалит 0 строк, а UPDATE обновит 0 строк, если ни одна из строк таблицы не удовлетворит условию WHERE в предложении DELETE или UPDATE. Но может ли INSERT вставить 0 строк?

Представьте ситуацию: INSERT в цикле срабатывает 100 раз, а в таблицу добавлено 60 строк. Возможно ли это?

Оказывается, возможно. INSERT может вставить 0 строк, если это INSERT с подзапросом SELECT, который возвращает 0 строк.

суббота, 24 августа 2013 г.

Опыт просветления: bash и Python

Не один год работая с Python и bash я, главным образом, использовал

  • первый - для написания программ,
  • второй - для выполнения команд ОС.

При этом моя работа в интерактивном режиме Python сводилась к маленьким исследованиям того, как работает некий фрагмент кода. А в командной строке bash я не пользовался конструкциями, присущими языкам программирования, такими, как if или for, ограничиваясь запуском отдельных команд.

Но в один прекрасный день 1 час параллельных импровизаций в bash и Python позволили на опыте (а не теоретически) узнать, что

  • bash - язык программирования, а не только интерпретатор командной строки, и
  • python - полноценная интерактивная рабочая среда!

пятница, 16 августа 2013 г.

ROLLUP, CUBE и GROUPING SETS в Oracle 11gR2

В этой статье я исследую опции ROLLUP, CUBE и GROUPING SETS, используемые в части GROUP BY предложения SELECT.

понедельник, 5 августа 2013 г.

Установка Oracle Database Express Edition 11g Release 2 на Windows

Oracle Database Express Edition 11g Release 2 - это легковесная версия СУБД Oracle 11g Release 2, предназначенная для обучения и разработки приложений. Она бесплатна для всех категорий пользователей. Ограничения, о которых сообщается на сайте Oracle: СУБД использует 1 процессор, до 1 GB оперативной памяти и позволяет хранить не более 11 GB данных.