Новые возможности языка SQL Firebird 3.0
21
Динамическая сборка запроса использующего строковые литералы.
EXECUTE BLOCK
RETURNS (
RDB$TRIGGER_NAME
CHAR(31)
)
AS
DECLARE VARIABLE S
VARCHAR(8191);
BEGIN
S
=
'SELECT
RDB$TRIGGER_NAME
FROM
RDB$TRIGGERS
WHERE
RDB$RELATION_NAME IN ';
S = S ||
Q'! ('SALES_ORDER', 'SALES_ORDER_LINE')!';
FOR
EXECUTE STATEMENT :S
INTO :RDB$TRIGGER_NAME
DO
SUSPEND;
END
Запрет смешивания явных и неявных JOIN
Смешивание явного и неявного синтаксиса
JOIN не было рекомендовано
никогда, но позволялось парсером. Некоторые «смешивания» приводили
оптимизатор к непредсказуемым результатам, включая ошибку «no current record
for
fetch operation
». Некоторые наиболее стили смешивания
запрещены в других
SQL
движках, теперь они запрещены и в Firebird. Дело в том что:
(TA, TB JOIN TC) эквивалентно TA, (TB JOIN C) и не равно (TA, TB) JOIN C
где каждая часть разделѐнная запятыми есть неявная производная таблица.
Примечание.
Это изменение может нарушить работоспособность вашего приложения.
Перед
переводом вашей системы на Firebird 3 тщательно просмотрите используемые в
ней запросы на наличии таких случаев.
Примеры:
Такой запрос вызовет ошибку «Column does not belong to referenced table».
SELECT *
FROM
TA, TB
JOIN TC
ON TA.COL1 = TC.COL1
WHERE TA.COL2 = TB.COL2
Это происходит потому, что явный JOIN не может видеть таблицу TA. Однако
следующий запрос будет выполнен без ошибок, поскольку изоляция не нарушена.
Новые возможности языка SQL Firebird 3.0
22
Do'stlaringiz bilan baham: