вторник, 16 мая 2017 г.

Комбинаторика в СУБД Oracle 11g

По запросу "oracle factorial" с ходу нагугливаются два подхода к вычислению факториала в СУБД Oracle:

  • самоочевидный: в цикле получить произведение натуральных чисел от 1 до n

    create or replace
    function fac1(n pls_integer) return number
    is
        f number := 1;
    begin
        if n in (0, 1) then
            return 1;
        end if;
        for i in 2..n loop
            f := f * i;
        end loop;
        return f;
    end fac1;
    /
    
  • забавный: вместо произведения натуральных чисел от 1 до n найти сумму их логарифмов, а затем возвести основание логарифма в найденную степень

    create or replace 
    function fac2(n pls_integer) return number
    is
        f number;
    begin
        select round(exp(sum(ln(level))))
        into f
        from dual
        connect by level <= n;
        return f;
    end fac2;
    /
    

вторник, 18 апреля 2017 г.

Нулевой год, юлианские дни и наследие папы Григория XIII

Сегодня в СУБД Oracle есть несколько типов данных для хранения дат и времени. Самый старый из них - тип DATE - совершенно точно был еще в Oracle 7 (с более ранними версиями СУБД я не работал). Тогда ввести значение типа DATE можно было только с помощью функции to_date. В версии 9 появился литерал для значений типа DATE (а также новые типы для дат и времени TIMESTAMP, TIMESTAMP WITH LOCAL TIME ZONE и TIMESTAMP WITH TIME ZONE). Рассмотрим сегодня некоторые особенности типа DATE.

четверг, 30 марта 2017 г.

Статистические функции в Oracle 11g

Рассмотрим на примерах возможности статистического анализа и статистические функции в Oracle 11g.

воскресенье, 19 февраля 2017 г.

Передача изменений между БД: подход в духе KISS

В БД SOURCE в таблице itemz ведется некий справочник. Время от времени в справочник добавляются новые строки и изменяются существующие. Возможно, строки даже иногда удаляются. В данных этого справочника нуждается БД DEST, причем контракт состоит в передаче из БД SOURCE всех изменений справочника. И как же организована передача изменений БД SOURCE в БД DEST? А вот так.

понедельник, 30 января 2017 г.

Про отношения с таблицами. C примерами на SQL

Отношение есть подмножество декартова произведения множеств, элементы которого - кортежи, составленные из элементов перемножаемых множеств. N-арное отношение есть подмножество декартова произведения N множеств, состоящее из кортежей длины N. В частности, бинарное отношение есть множество пар, или кортежей длины 2, где первый элемент принадлежит первому, а второй - второму из двух перемножаемых множеств.

Например, для двух множеств

A = {1, 2, 3}
B = {'Стакан', 'Лимон'}

декартово произведение есть

A x B = {
    (1, 'Стакан'), 
    (1, 'Лимон'),
    (2, 'Стакан'),
    (2, 'Лимон'),
    (3, 'Стакан'),
    (3, 'Лимон')
}