Книга: Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ

Использование процедур выбора

Использование процедур выбора

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

Эзотерические наборы

Техника хранимых процедур выбора предоставляет колоссальную гибкость для извлечения наборов; эта техника превосходит логику, доступную в спецификациях

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

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

CREATE PROCEDURE BREAKAPART(

INPUTLIST VARCHAR(1024))

RETURNS (

NUMERO SMALLINT, ITEM VARCHAR (20)

AS

DECLARE CHARAC CHAR;

DECLARE ISDONE SMALLINT = 0;

BEGIN

NUMERO = 0;

ITEM = ' ' ;

WHILE (ISDONE = 0) DO

BEGIN

CHARAC = SUBSTRING (INPUTLI ST FROM 1 FOR 1);

IF (CHARAC = '') THEN

ISDONE = 1;

IF (CHARAC = OR CHARAC = '') THEN

BEGIN

NUMERO = NUMERO + 1;

SUSPEND;

/* Отправляет строку в буфер строк */

ITEM = '';

END

ELSE

ITEM = ITEM || CHARAC;

INPUTLIST = SUBSTRING(INPUTLIST FROM 2);

END

END ^

COMMIT;

/* */

SELECT * FROM BREAKAPART (' ALPHA, BETA, GAMMA, DELTA ') ;

NUMERO ITEM

1 ALPHA

2 BETA

3 GAMMA

4 DELTA

Выигрыш в производительности для сложных наборов

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

Оглавление книги


Генерация: 0.831. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз