суббота, 30 декабря 2017 г.

Присваивание в Python

Переменная в Python не то же самое, что переменная в С или другом языке со статической типизацией. Там требуется объявление имени и типа переменной перед ее использованием в программе.

Переменную в C часто сравнивают с коробкой определенной формы и размера, на которой написано имя переменной, а внутри лежит значение. Размер и форма коробки - ее тип - диктует, какие значения можно положить в эту именованную коробку, то есть, присвоить переменной с данным именем. Ничего подобного нет в Python. Переменная в Python - это просто именованный указатель на...

Если в C одной переменной типа int присвоить значение другой переменной того же типа, то мы получим два одинаковых и независимых друг от друга значения, каждое из которых будет занимать свое место в памяти (то есть, лежать в своей отдельной коробке, на которой написано имя переменной). Не так в Python, где все значения являются объектами...

В таких языках как C передача параметров в функцию бывает по значению или по ссылке. В первом случае параметру функции присваивается передаваемое значение, а во втором - ссылка на значение (указатель). Тогда из функции можно изменить объект, на который указывает ссылка. Но в Python есть только один способ передачи параметров в функцию...

четверг, 30 ноября 2017 г.

Пространства имен в Python

Namespaces are one honking great idea -- let's do more of those!

The Zen of Python, by Tim Peters

Как известно, в Python есть локальные пространства имен (внутри функции или класса, которые могут быть вложенными), глобальное (на уровне текущего модуля) и встроенное пространство имен модуля builtins. К последнему Python обращается в последнюю очередь, если искомое имя не находится в локальном и глобальном пространствах имен.

Посмотрим на пространства имен Python в интерактивном режиме.

среда, 26 июля 2017 г.

Типы данных TIMESTAMP и INTERVAL в СУБД Oracle

Сегодня в СУБД Oracle есть несколько типов данных для хранения дат и времени. Самый старый из них - тип date - совершенно точно был еще в Oracle 7 (с более ранними версиями СУБД я не работал). Некоторые интересные вещи про тип date я уже рассказывал. В версии Oracle 9 появились новые типы для дат и времени timestamp, timestamp with local time zone и timestamp with time zone, а также интервальные типы interval year to month и interval day to second, работающие вместе с новыми типами и типом date.

Типы timestamp, timestamp with local time zone и timestamp with time zone привнесли два новшества, по сравнению с типом date:

  • возможность работать со временем с точностью до наносекунд,
  • возможность работать с часовыми поясами (time zones).

Ниже мы поработаем с типами timestamp и interval, обращая внимание на задание значений этих типов с помощью литералов и на их арифметику. Затем обратимся к различиям между типами timestamp, timestamp with local time zone и timestamp with time zone, и рассмотрим, какой из них предпочтительно использовать в какой ситуации.

вторник, 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, 'Лимон')
}