Версия FB 2.5 Firebird-2.5.0.26074_1_Win32.exe ODS 11.2
Скачала FB 2.5.1 Firebird-2.5.1.26351_1_Win32.exe - та же особенность
БД в кодировке UTF-8
UNION in VIEW
String truncation error when selecting from a VIEW with UNION inside
особенность пофиксена
Эпизод первый
Скачала FB 2.5.1 Firebird-2.5.1.26351_1_Win32.exe - та же особенность
БД в кодировке UTF-8
UNION in VIEW
String truncation error when selecting from a VIEW with UNION inside
особенность пофиксена
Эпизод первый
create view TREE_TEST (
ID, TEXT, PARENTID, CONDITIONS,
STMT, RULFNAME )
as
select uidorg , nameorg
, '0'
, ' G.UIDORG = ' || '''' || uidorg || ''''
, '', 'KODORG'
from org_delivery;
ID, TEXT, PARENTID, CONDITIONS,
STMT, RULFNAME )
as
select uidorg , nameorg
, '0'
, ' G.UIDORG = ' || '''' || uidorg || ''''
, '', 'KODORG'
from org_delivery;
Делаем запрос.
select ID, TEXT, PARENTID, CONDITIONS, STMT, RULFNAME
from TREE_TEST
Результат нормальный
Эпизод второй. Добавляем UNION
create view TREE_TEST (
ID, TEXT, PARENTID, CONDITIONS,
STMT, RULFNAME )
as
select 0, 'Организации', NULL, '', ''
, 'KODORG'
from rdb$database
union
select uidorg
, nameorg
, '0'
, ' G.UIDORG = ' || '''' || uidorg || ''''
, ''
, 'KODORG'
from org_delivery
select ID, TEXT, PARENTID, CONDITIONS, STMT, RULFNAME
from TREE_TEST
При этом отдельно запрос, к-й помещен во View выполняется без ошибок
Текст ошибки
Arithmetic overflow or division by zero has occurred.
arithmetic exception, numeric overflow, or string truncation.
string right truncation.
Хелен Борри.
«Известная ошибка в просмотрах FB 1.0.x»
стр.530 Запрос с объединением (union) может привести к краху сервера.
Ошибка исправлена до релиза версии 1.5
Скачала FB 2.5.1 Firebird-2.5.1.26351_1_Win32.exe - та же ошибка
Решение. Надо явно задавать тип поля, с помощью конструкции cast
CREATE OR ALTER VIEW TREE_TEST1(
ID,
TEXT,
PARENTID,
CONDITIONS,
STMT,
RULFNAME)
AS
select 0, 'Организации', NULL, '', ''
, cast('KODORG' as char(6))
from org_delivery
union
select uidorg
, nameorg
, '0'
, ' G.UIDORG = ' || '''' || uidorg || ''''
, ''
, cast('KODORG' as char(6))
from org_delivery
;