Неподдерживаемый тип данных во VIEW

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Lars
Сообщения: 86
Зарегистрирован: 21 дек 2005, 16:34

Неподдерживаемый тип данных во VIEW

Сообщение Lars » 11 окт 2008, 16:13

Подскажите решение. Создаю VIEW с вложенными запросами.

Код: Выделить всё

CREATE VIEW VIEW_MOVEMENT_OTK2(
    ID,
    CAPACITY,
    OWNER_NAME,
    ID_FROM,
    ID_PLACE,
    ID_CARGO,
    MASSA,
    ID_CAR,
    CAR_NAME,
    T_IN,
    STATION_NAME,
    CARGO_NAME,
    NUM_NAKLAD,
    SHIPPER_NAME,
    ID_CERT,
    T_OUT,
    VES_BRUS_INT,
    NOTE,
    VES_MAS,
    VES_OUT,
    T_START_WORK,
    ID_CARGO_OTK,
    ID_OTK_MOV,
    OUT_FROM_OTK,
    OTK_IN,
    ID_TO_FROM_OTK,
    CARGO_NAME_OTK,
    POINT_FROM_OTK,
    TRASH,
    WATER,
    ID_MAIN,
    NUM_TEST,
    NAMEREV)
AS
SELECT
    TBL_MOV.ID,
    VIEW_CAR.CAPACITY,
    VIEW_CAR.OWNER_NAME,
    TBL_MOV.ID_FROM,
    TBL_MOV.ID_PLACE,
    TBL_MOV.ID_CARGO,
    TBL_MOV.MASSA,
    TBL_MOV.ID_CAR,
    VIEW_CAR.CAR_NAME,
    TBL_MOV.T_IN,
    TBL_STATIONS.NAME STATION_NAME,
    TBL_CARGO.CARGO_NAME,
    TBL_MAIN.NUM_NAKLAD,
    TBL_SHIPPER.NAME ,
    TBL_MAIN.ID_CERT,
    TBL_MOV.T_OUT,
    TBL_MAIN.VES_BRUS_INT,
    NOTE,
    ( SELECT TMOV_MAS.MASSA FROM TBL_MOVEMENT TMOV_MAS WHERE ( TMOV_MAS.ID_ROOT = TBL_MOV.ID AND TMOV_MAS.ID_PLACE=11 ) ),
    ( SELECT TMOV_MAS.T_OUT FROM TBL_MOVEMENT TMOV_MAS WHERE ( TMOV_MAS.ID_ROOT = TBL_MOV.ID AND TMOV_MAS.ID_PLACE=11 ) ),
    ( SELECT TMOV.T_START_WORK FROM TBL_MOVEMENT TMOV WHERE ( TMOV.ID_ROOT = TBL_MOV.ID AND TMOV.ID_PLACE=12 )  ),
    ( SELECT TMOV.ID_CARGO FROM TBL_MOVEMENT TMOV WHERE ( TMOV.ID_ROOT = TBL_MOV.ID AND TMOV.ID_PLACE=12 )  ),
    ( SELECT TMOV.ID FROM TBL_MOVEMENT TMOV WHERE ( TMOV.ID_ROOT = TBL_MOV.ID AND TMOV.ID_PLACE=12 )  ),
    ( SELECT CAST( TMOV.T_OUT AS TIMESTAMP) FROM TBL_MOVEMENT TMOV WHERE ( TMOV.ID_ROOT = TBL_MOV.ID AND TMOV.ID_PLACE=12 )  ),
    ( SELECT TMOV.T_IN FROM TBL_MOVEMENT TMOV WHERE ( TMOV.ID_ROOT = TBL_MOV.ID AND TMOV.ID_PLACE=12 )  ),
    ( SELECT TMOV.ID_TO FROM TBL_MOVEMENT TMOV WHERE ( TMOV.ID_ROOT = TBL_MOV.ID AND TMOV.ID_PLACE=12 )  ),
    ( SELECT TBC.CARGO_NAME FROM TBL_CARGO TBC INNER JOIN TBL_MOVEMENT TMOV ON (TMOV.ID_CARGO=TBC.ID) WHERE TMOV.ID_ROOT = TBL_MOV.ID  AND TMOV.ID_PLACE=12),
    ( SELECT  TBS.NAME FROM TBL_STATIONS TBS INNER JOIN TBL_MOVEMENT TMOV ON (TMOV.ID_TO=TBS.ID) WHERE TMOV.ID_ROOT = TBL_MOV.ID  AND TMOV.ID_PLACE=12),
    TBL_MAIN.TRASH,
    TBL_MAIN.WATER,
    TBL_MAIN.ID,
    TBL_MAIN.NUM_TEST,
    VIEW_CAR.NAMEREV
FROM TBL_SHIPPER
   INNER JOIN TBL_MAIN ON (TBL_SHIPPER.ID = TBL_MAIN.ID_SHIPPER_IN)
   INNER JOIN TBL_MOVEMENT TBL_MOV ON (TBL_MAIN.ID_MOVEMENT = TBL_MOV.ID)
   INNER JOIN VIEW_CAR ON (TBL_MOV.ID_CAR = VIEW_CAR.ID)
   INNER JOIN TBL_STATIONS ON (TBL_MOV.ID_FROM = TBL_STATIONS.ID)
   INNER JOIN TBL_CARGO ON (TBL_MOV.ID_CARGO = TBL_CARGO.ID)
   INNER JOIN TBL_OPERATION ON (TBL_MAIN.ID_IN_OPERATION = TBL_OPERATION.ID)
WHERE
    TBL_MOV.ID_ROOT = 0
    AND
    TBL_MOV.ID_CARGO!=0
;
Выделенные поля в таблице TIMESTAMP.
Затем обращаюсь к этому просмотру запросом:

Код: Выделить всё

SELECT * FROM VIEW_MOVEMENT_OTK2 WHERE OUT_FROM_OTK  BETWEEN  :dStart AND :dEnd
На что получаю ответ:

Код: Выделить всё

Unsupported field type specified in BETWEEN predicate.
Преобразования делал как вариант, чтобы указать серверу на принуд. преобр. данных.
Примечание: в поле, котором ищу есть нулевые записи.
Версия сервера 1.5.4.

Ответить