Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

VPS в России, Европе и США

Бесплатная поддержка и администрирование

Оплата российскими и международными картами

🔥 VPS до 5.7 ГГц под любые задачи с AntiDDoS в 7 локациях

💸 Гифткод CITFORUM (250р на баланс) и попробуйте уже сейчас!

🛒 Скидка 15% на первый платеж (в течение 24ч)

Скидка до 20% на услуги дата-центра. Аренда серверной стойки. Colocation от 1U!

Миграция в облако #SotelCloud. Виртуальный сервер в облаке. Выбрать конфигурацию на сайте!

Виртуальная АТС для вашего бизнеса. Приветственные бонусы для новых клиентов!

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

2004 г

СУБД ЛИНТЕР. Технический обзор.

Научно-производственное предприятие РЕЛЭКС
www.relex.ru

содержание

V. Внутренние языковые средства (SQL, хранимые процедуры, триггеры)

A. Язык запросов SQL

Язык SQL-ЛИНТЕР реализует международный стандарт языка SQL - ANSI/ISO SQL-92.

В SQL-ЛИНТЕР пользователь найдет такие мощные языковые средства, как предложение UNION, полный набор операций соединения - JOIN, все описанные в указанном стандарте возможности по реализации ограничений целостности и пр.

Для совместимости с некоторыми СУБД других производителей (Oracle, DB2, Informix, Microsoft SQL Server и др.) в язык запросов ЛИНТЕР введены специальные встроенные функции, языковая работа по управлению контролем доступа к информации, иерархические запросы к таблицам, последовательности и т.д.

    Для удобства пользователей в SQL-ЛИНТЕР включены так же следующие расширения указанного стандарта:
  1. Языковая работа с BLOB-столбцами.
  2. Языковая работа с событиями в ЛИНТЕР.
  3. Разрешено использование нескольких таблиц во FROM в операциях UPDATE и DELETE. Например,
    DELETE FROM таблица JOIN список_таблиц WHERE ...
    	UPDATE таблица JOIN список_таблиц WHERE ...
  4. Разрешена конструкция INTO в SELECT-операторе для совместимости с некоторыми диалектами языка SQL. Например,
    	SELECT список_выражений INTO список_параметров FROM ...
  5. Разрешена конструкция CAST NULL AS тип.
  6. Введены следующие предложения для установки режимов работы каналов:
    SET TRANSACTION READ ONLY - перевод канала в режим read-only;
    SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED - перевод канала в режим грязного чтения.
  7. Введены предложения для работы с правилами репликации:
    CREATE REPLICATION RULE правило FOR таблицa TO таблица ON NODE имя_узла USER пользователь PASSWORD 'пароль' [ENABLE |DISABLE];
    ALTER REPLICATION RULE правило [PASSWORD 'пароль'] [ENABLE |DISABLE];
    DROP REPLICATION RULE правило;
  8. Разнообразные возможности ALTER TABLE по модификации структуры таблицы – от изменения имен (таблицы, её столбцов) до изменений важнейших характеристик самой таблицы и её столбцов (например, размеров, числа файлов, места их расположения, а для столбцов – длины данных, значений по умолчанию и т.д.).

Ещё один немаловажный штрих – возможность поиска отдельных слов и словосочетаний в больших текстовых значениях, что очень важно при организации больших полнотекстовых информационных баз.

B. Язык хранимых процедур СУБД ЛИНТЕР

Наличие механизма хранимых процедур в СУБД ЛИНТЕР позволяет существенно расширить возможности языка SQL, организуя процедурную обработку данных на сервере согласно алгоритму пользователя.

По функциональной мощности хранимые процедуры ЛИНТЕР в некоторых аспектах даже превышают стандарт ANSI/ISO SQL-92/PSM (Persistent Stored Modules).

    Есть множество важных моментов, не отраженных в стандарте, например:
  • использование оттранслированных запросов и запросов с параметрами (динамически изменяемых запросов),
  • управление транзакциями.

Хранимые процедуры ЛИНТЕР могут использовать как обычные, так и оттранслированные запросы с параметрами и без параметров, кроме того процедуры имеют возможность возвращать курсор, что очень удобно для программирования.

Язык хранимых процедур предоставляет мощный синтаксис выражений включающий все необходимые операции с переменными и значениями каждого типа данных, вызовы разнообразных стандартных функций (таких, как преобразование типов, работа со строчными данными и т.д.) операцию присваивания (тот факт, что присваивание является операцией, а не отдельным оператором, позволяет строить, например, такие конструкции: a := b := c := 0;).

Язык хранимых процедур позволяет работать со всеми стандартными типами данных ЛИНТЕР (Integer, Smallint, Char, Byte, Numeric, Real, Double, Date), а также дополнительным типом BOOL (логический). Тип CHAR рассматривается как строки с заданной максимальной длиной, и для него определены удобные в использовании строковые константы и операции конкатенации.

Все операции со всеми типами данных реализуют трехзначную логику, то есть поддерживается значение NULL для любого типа данных, которое означает состояние “значение не определено”.

Последовательность операторов позволяет закодировать линейный алгоритм. Для организации ветвящихся алгоритмов может использоваться оператор типа IF..ELSEIF...ELSEIF...ELSE..ENDIF, оператор выбора CASE, оператор перехода на метку GOTO. Циклические алгоритмы организуются при помощи оператора цикла WHILE.

Для вызова из одной процедуры других используется оператор CALL. Допустимы рекурсивные вызовы процедур.

Процедуры могут получать входные параметры и возвращать результат работы через механизм возвращаемого значения (оператор RETURN) и/или выходные параметры. Результатом работы процедуры может являться не только скалярное значение, но и курсор (выборка).

Для обработки результатов SELECT-запросов в процедурах используются курсоры (CURSOR), тип которых объявляется в соответствии со структурой ответа. Цикл работы с курсором может включать его открытие оператором OPEN (как результат запроса или выполнения другой процедуры), выборку данных оператором FETCH (в любом направлении) и закрытие (CLOSE) или, если процедура возвращает курсор, возврат (RETURN).

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

Понятие “курсор” используется исключительно для выборки данных. Для выполнения любых DML и DDL запросов (запросов отличных от SELECT-запроса) используется оператор EXECUTE.

Все операции процедур по модификации данных входят в пользовательскую транзакцию. Завершением транзакции управляет пользователь, однако, процедура также может зафиксировать или откатить изменения, сделанные в ее теле (и теле ее дочерних процедур) операторами COMMIT и ROLLBACK.

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

В момент возникновения исключения управление сразу автоматически передается на соответствующую ветку блока обработки исключений (EXCEPTIONS), что избавляет от необходимости “засорения” кода процедуры многочисленными условными операторами, проверяющими результат завершения каждого оператора. Процедура может обработать исключение, либо завершиться и передать исключение на верхний уровень (оператор RESIGNAL).

Для организации работы с хранимыми процедурами и триггерами СУБД ЛИНТЕР содержит транслятор хранимых процедур, преобразовывающий исходный текст процедуры/триггера в оттранслированный код, позволяющий быстро выполнять процедуру в исполняющей подсистеме.

Этот код хранится в специальной системной таблице $$$PROC, описания входных/выходных параметров процедур хранятся в таблице параметров $$$PRCD. Обе эти таблицы должны быть созданы перед началом работы с процедурами/триггерами (для триггеров так же необходимо наличие таблицы $$$TRIG).

В поле типа BLOB таблицы $$$PROC сохраняются оттранслированный код и исходный текст процедуры или триггера (последнее позволяет пользователю получать исходный текст в целях редактирования). Процедуры и триггеры создаются с помощью соответствующих запросов SQL типа CREATE/ALTER PROCEDURE, CREATE TRIGGER.

В случае ошибки в тексте процедуры/триггера возвращается специальный код ошибки ЛИНТЕР и интерактивные утилиты выдают подробную расшифровку в какой строке и какая ошибка произошла. В этом случае в таблице $$$PROC создается только одна запись, содержащая исходный текст, что в последствии позволяет пользователю получить его и исправить ошибки.

Возможно использование хранимых процедур как функций, расширяющих язык SQL.

Для запуска процедур используется запрос
EXECUTE <процедура>(<параметры>)
в котором указывается имя и параметры процедуры. При передаче параметров можно использовать механизм передачи значений по умолчанию, когда указывается не весь список, а лишь интересующие значения.

содержание       назад       вперед

VPS/VDS серверы. 30 локаций на выбор

Серверы VPS/VDS с большим диском

Хорошие условия для реселлеров

4VPS.SU - VPS в 17-ти странах

2Gbit/s безлимит

Современное железо!

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

✅ Дешевый VPS-хостинг на AMD EPYC: 1vCore, 3GB DDR4, 15GB NVMe всего за €3,50!

🔥 Anti-DDoS защита 12 Тбит/с!

Новости мира IT:

Архив новостей

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...