Разработка динамических сайтов
SEO услуги
Управление контекстной рекламой

Вход на хостинг

Имя пользователя:*

Пароль пользователя:*

IT-новости

20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла

Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......

подробнее

30.07.2015 Ищем уникальный контент для сайта

Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......

подробнее

11.05.2015 Распространённые ошибки разработчиков сайтов

Не секрет, что в сети Интернет насчитывается миллионы сайтов, и каждый день появляются тысячси новых......

подробнее

           where tablename = 'test1';

    if tmp is null then

           raise exception 'Table test1 not found.';

    else

           delete from test1;

    end if;

     

    for i in 1..N loop

           Rand := random();

           insert into test1 values(Rand);

    end loop;

    return 0;

END;'

LANGUAGE 'plpgsql’;

Этот несложный пример демонстрирует большое количество особенностей работы функций. Пройдемся по ним по порядку.

Конструкция «alias for $N» в секции описаний позволяет связать описываемую переменную с другой, описанной ранее. В данном случае мы устанавливаем связь со стандартными переменными-параметрами. Так, $1 соответствует первому параметру, $2 – второму и т. д. Для удобства работы передаваемый в функцию параметр мы связываем с переменной N.

При описании переменной Rand показано, как инициализировать переменную значением на стадии описания, хотя в данном случае это и не нужно.

Конструкция «select <список полей> into <список переменных> …» позволяет сохранять результат выборки в переменных для дальнейшего использования. Количество переменных должно соответствовать количеству выбираемых полей. В данном случае мы проверяем, есть ли в нашей БД нужная нам таблица test1. Если она существует, то в служебной таблице pg_tables для нее будет запись. В противном случае переменная tmp получит псевдозначение NULL.

Также обратите внимание на необходимость экранирования всех кавычек, встречающихся в теле функции, поскольку оно уже заключено в кавычки как параметр команды create function (в дальнейшем, приводя листинги функций, я для простоты чтения символы экранирования буду опускать).

Далее проверяем, содержит ли переменная tmp какое-нибудь значение, и если нет – генерируем исключение (команда «raise exception»), по которому наша функция аварийно завершится.

Если же таблица test1 существует, то очищаем ее от старых значений (если таковые имеются) и приступаем к заполнению ее случайными числами, для генерации которых используется внутренняя функция random(), возвращающая случайное число в диапазоне 0..1.

Выполнить функцию можно с помощью такого запроса:

select inserter(5);

Запустите ее и убедитесь, что выполнение функции завершилось ошибкой «Table test1 not found.». Далее создаем нужную таблицу и повторяем выполнение функции:

create table test1 (rnd numeric);

select inserter(5);

select * from test1;

Как видите, на этот раз все 5 записей послушно добавились. Причем добавить 500 000 записей будет столь же просто. А теперь попробуйте посчитать трафик и число обращений к серверу баз данных, если эту задачу решать с помощью внешнего сценария на Perl, который будет выполняться на другой машине… Пользуясь случаем, давайте заодно оценим скорость выполнения операций вставки и удаления (машина Cel466/64 Мб с полным «джентльменским набором» – Apache, Squid, Sendmail; load average ~0.1):


Предыдущая страницаОглавлениеСледующая страница
 
[001] [002] [003] [004] [005] [006] [007] [008] [009] [010] [011] [012] [013] [014] [015] [016] [017] [018] [019] [020]
[021] [022] [023] [024] [025] [026] [027] [028] [029] [030] [031] [032] [033] [034] [035] [036] [037] [038] [039] [040]
[041] [042] [043] [044] [045] [046] [047] [048] [049] [050] [051] [052] [053] [054] [055] [056] [057] [058] [059] [060]
[061] [062] [063] [064] [065] [066] [067] [068] [069] [070] [071] [072] [073] [074] [075] [076] [077] [078] [079] [080]
[081] [082] [083] [084] [085] [086] [087] [088] [089] [090] [091] [092] [093] [094] [095] [096] [097] [098] [099] [100]
[101] [102] [103] [104] [105] [106] [107] [108] [109] [110] [111] [112] [113] [114] [115] [116] [117] [118] [119] [120]
[121] [122] [123] [124] [125] [126] [127] [128] [129] [130] [131] [132] [133] [134] [135] [136] [137] [138] [139] [140]
[141] [142] [143] [144] [145] [146] [147] [148] [149]

+7 (831) 413-63-27
ООО Дельта-Технология ©2007 - 2023 год
Нижний Новгород, ул. Дальняя, 17А.
Rambler's Top100