среда, 20 августа 2008 г.

Firebird 2.0 – Новые возможности DML (Data Model Language)

Firebird 2.0 - ROLLBACK RETAIN - Откат транзакции с сохранением состояния

ROLLBACK RETAIN – откатывает транзакцию на момент последнего вызова COMMIT RETAIN или на момент старта транзакции.

Firebird 2.0 - Инструкция EXECUTE BLOCK

EXECUTE BLOCK - позволяет выполнить блок инструкций на стороне сервера. Пример:
EXECUTE BLOCK (X INTEGER = :X)
RETURNS (Y INTEGER)      
AS                       
BEGIN                    
    Y = X * 2;           
SUSPEND;                 
END

Firebird 2.0 - INSERT RETURNING - Возврат значений после вставки.

В Firebird 2.0 появилось дополнение RETURNING к команде INSERT позволяет выполнить вставку и прочитать добавленные значения. Очень удобно получать значение ID-поля записи, для которого использовался генератор:
insert into sample (ID, data)
values(GEN_ID(sample_generator,1),:data)
RETURNING ID
RETURNING для остальных операций появился только в следующих версиях Firebird, начиная с Firebird 2.1: UPDATE … RETURNING, INSERT OR UPDATE … RETURNING, DELETE … RETURNING

Firebird 2.0 - Производные таблицы – именованные наборы данных

Производные таблицы (Derived tables) - это именованные наборы, основанные на выборке SELECT. Пример именованной выборки:
select * from
  (select EMP_NO, FIRST_NAME  ' '  LAST_NAME from employee)
      as EMPLOYEE_DERIVED_TABLE (ID, FULL_NAME)
Развитием производных таблиц Firebird 2.0 стали CTE (COMMON TABLE EXPRESSIONS) - общие табличные выраженияв Firebird 2.1 . В отличии от производных таблиц, CTE позволяют писать более сложные запросы, в том числе и рекурсивные!

Firebird 2.0 - Инструкция ROWS - Альтернатива FIRST/SKIP

ROWS - позволяет указать количество обрабатываемых записей. Может быть использовано любых подзапросах, в UNION, в командах UPDATE и DELETE. Пример постраничного вывода:
select * from customer rows 50 to 100

Firebird 2.0 - добавлено IIF - условие

Возможна более короткая запись условия в запросе:
SELECT IIF(VAL > 0, VAL, -VAL) FROM OPERATION
Взамен:
CASE
WHEN  THEN 
ELSE 
END

Firebird 2.0 - функция CAST - Приведение типов.

Позволяет сообщить серверу firebird 2.0 о типе преобразуемого параметра:
SELECT CAST(? AS INT) FROM RDB$DATABASE

Firebird 2.0 - Улучшенная функция SUBSTRING

Функция substring может принимать выражения, подзапросы, вложенные функции в качестве 2-го и третьего параметров:
x = varchar(50);
substring(x from 1 for 1);

Firebird 2.0 - Новые контекстные переменные

CURRENT_TIME and CURRENT_TIMESTAMP опциаонально позволяют получать время с секундами:

1. SELECT CURRENT_TIME FROM RDB$DATABASE;
2. SELECT CURRENT_TIME(3) FROM RDB$DATABASE;
3. SELECT CURRENT_TIMESTAMP(3) FROM RDB$DATABASE;

Firebird 2.0 - GROUP BY может быть выражением

GROUP BY
SUBSTRING(CAST((A * B) / 2 AS VARCHAR(15)) FROM 1 FOR 2)

Firebird 2.0 - Поддержка индекса колонки в ORDER BY для запроса SELECT *

SELECT * FROM … ORDER BY 9

Firebird 2.0 - оператор NEXT VALUE FOR – Синоним GEN_ID

INSERT INTO EMPLOYEE (ID, NAME)
VALUES (NEXT VALUE FOR S_EMPLOYEE, 'Vasya Pupkin');

Кроме того:

  • Улучшения при работе с NULL.
  • Поддержка CROSS JOIN.
  • Поддержка ROWS, PLAN и ORDER BY в операторах UPDATE и DELETE.
  • Функции для работы с контекстными переменными: RDB$GET_CONTEXT и RDB$SET_CONTEXT.
  • Поддержка псевдонимов колонок в условиях ORDER BY и GROUP BY.
  • Предопределенные пространства имен USER_SESSION, USER_TRANSACTION, SYSTEM.

Комментариев нет: