Страница 1 из 1
подзапрос
Добавлено: 02 сен 2005, 12:42
Karp
не пробовал раньше подзапросы в секции select ... from ...
вроде бы с FB 1.5 можно (читал RN)
так вот, запрос следующего вида:
select r_.r_user,
(select count(r_1.item) from table_item r_1 where (r_1.date_ in between :d1 and :d2) and (r_1.r_user=r_.r_user))
from table_item
where (r_.date_ in between :d1 and :d2) and (r_take=:id_take)
в YA-887 проходит и выдаёт правильные результаты, в FB 1.5.2 и FB 2.0 3alpha вообще не катит (ошибку с № ХХХХ выдаёт)
я понимаю, что в подзапросе используется в качестве аргумента значение из основного запроса
Это фича YA? отмечу, что в боевой БД я это не использую, и в ХП этот запрос даёт в YA неправильные результаты (почему-то count(r_1.item) не обнуляется
Добавлено: 02 сен 2005, 13:03
dimitr
а слабо точный запрос привести, а не обрубок?
какая дословно ошибка выдается?
по сути идентичный запрос:
Код: Выделить всё
select rdb$relation_name,
(select count(*) from rdb$relation_fields r_1 where r_1.rdb$relation_name=r_.rdb$relation_name)
from rdb$relations r_
у меня работает на всех версиях
Добавлено: 02 сен 2005, 13:25
Karp
dimitr писал(а):а слабо точный запрос привести, а не обрубок?
какая дословно ошибка выдается?
не слабо, в понедельнтк токо (патамуч-то не хочу врать -))
могу и срез БД кинуть
там ещё join-ы есть
но суть в том, что YA в подзапросе понимает значение параметра (который является возвращаемым значением запроса в основной части)
я реализовал это через ХП, но ведь странно, что в YA этот запрос прходит, а в FB нет...
щшибка ISC{{{{{{ не помню число, но одинаковое в FB...
Добавлено: 02 сен 2005, 13:31
Karp
кстати, раз уж ты отвлёкся на меня...
нет ведь функции LIST в FB-2-A3, а вот рестор метаданных проходит..
полный рестор обрубается...
Добавлено: 02 сен 2005, 15:18
dimitr
Karp писал(а):
могу и срез БД кинуть
там ещё join-ы есть
щаз окажется, что там еще и агрегаты есть...
Karp писал(а):но суть в том, что YA в подзапросе понимает значение параметра (который является возвращаемым значением запроса в основной части)
я тебе привел пример именно такого запроса. Все работает ОК.
Karp писал(а):щшибка ISC{{{{{{ не помню число, но одинаковое в FB...
IMHO, текст было проще запомнить
Karp писал(а):нет ведь функции LIST в FB-2-A3, а вот рестор метаданных проходит.. полный рестор обрубается...
щаз начну ругаться матом. Где текст ошибки? И вообще, "не верю" (с)
Добавлено: 02 сен 2005, 15:40
kdv
параметр OldParameterOrdering в firebird.conf менять не пробовал?
Добавлено: 02 сен 2005, 15:43
Karp
dimitr писал(а):
щаз начну ругаться матом. Где текст ошибки? И вообще, "не верю"
Дим! я сам не верил-))) новидел своими глазами...
вот с этого момента подробнее..
в понедельник = полный текст в студию -))
а по существу? ну не проходит у меня этот зпрос -)))
Добавлено: 02 сен 2005, 15:45
kdv
по существу - не клюй мозги, дай сообщение об ошибке.
Добавлено: 02 сен 2005, 15:49
Karp
по поводу альфы 3:
именно так и говорит (про метаданные) ну, что нет ошибок -))
с данными говорит :
ошибка конвертации строки "0"
хотя нет тама такой строки ваабще -)))
Добавлено: 02 сен 2005, 15:53
Karp
kdv писал(а):по существу - не клюй мозги, дай сообщение об ошибке.
Дам! но в понедельник, т.к. сейчас не на работе и воспроизвести по памяти не смогу...
Добавлено: 02 сен 2005, 16:08
Karp
kdv писал(а):параметр OldParameterOrdering в firebird.conf менять не пробовал?
попробую -)))
Добавлено: 05 сен 2005, 11:13
Karp
dimitr писал(а):
щаз окажется, что там еще и агрегаты есть...
Запрос (в Ya работает):
Код: Выделить всё
SELECT R_U.RING_USER_NAME,
(SELECT COUNT(R_D1.RING_ITEM_ID) FROM RING_DATA R_D1
WHERE (CAST(R_D1.RING_TIME AS DATE) BETWEEN :D1 AND :D2) AND
(R_D1.RING_TYPE_ID=18) AND
(R_D1.RING_USER_ID=R_U.RING_USER_ID)) AS NN_1,
COUNT(R_D.RING_USER_ID) AS NN_RES
FROM RING_USERS R_U JOIN
RING_DATA R_D ON (R_D.RING_USER_ID=R_U.RING_USER_ID) JOIN
RING_ITEMS R_I ON (R_I.RING_ITEM_ID=R_D.RING_ITEM_ID) JOIN
RING_TAKES R_T ON (R_T.RING_TAKE_ID=R_I.RING_TAKE_ID)
WHERE (CAST(R_D.RING_TIME AS DATE) BETWEEN :D1 AND :D2) AND
(R_T.RING_TAKE_ID=3) AND
(R_D.RING_TYPE_ID IN (17,18,26,27,28,29))
GROUP BY R_U.RING_USER_NAME
ORDER BY R_U.RING_USER_NAME
Ощибка в 1.5.2:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
unknown ISC error 335544824.
Ощибка в 2.0:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).
dimitr писал(а):щаз начну ругаться матом. Где текст ошибки? И вообще, "не верю" (с)
за LIST согласен на канделявр, "соврамши" (C), я его комментировал
но полный рестор всё одно не проходит, буду разбираться, текст ошибки обязательно сообщу [/code]
Добавлено: 05 сен 2005, 11:28
sag
Karp писал(а):dimitr писал(а):
щаз окажется, что там еще и агрегаты есть...
Запрос (в Ya работает):
Ощибка в 1.5.2:
Ощибка в 2.0:
странно, на 1.5.2 ошибка так же как и на 2-ке должна быть опознана.
Добавь в group by секцию поле R_U.RING_USER_ID:
Код: Выделить всё
GROUP BY R_U.RING_USER_NAME, R_U.RING_USER_ID
ORDER BY R_U.RING_USER_NAME
Добавлено: 05 сен 2005, 13:08
dimitr
Karp писал(а):Ощибка в 1.5.2:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
unknown ISC error 335544824.
firebird.msg не соответствует версии сервера
Добавлено: 05 сен 2005, 19:23
Karp
dimitr писал(а):
firebird.msg не соответствует версии сервера
от 13.12.2004 01.05
при ресторе постоянно вылетает ошибка
Код: Выделить всё
gbak: restoring data for table TABLE_NAME
gbak: ERROR: conversion error from string "0"
gbak: ERROR: gds_$send failed
gbak: Exiting before complection due to erors
но здесь похоже на coollate, я менял WIN_1251_RU на WIN_1251:
Код: Выделить всё
update RDB$FIELDS set
RDB$COLLATION_ID = 0
where RDB$FIELD_NAME = 'STRING_64';
commit;
может хвост какой остаётся? потому как в отресторенные метаданные тоже запись не проходит из скрипта (ФК убиты были), а вот создание таблицы из скрипта с последующей вставкой проходит на ура
Добавлено: 06 сен 2005, 09:33
kdv
слушай, ты там, конечно, можешь переколупать сам все что угодно, но такие сообщения об ошибках слать не надо. Сам наковырял в системных таблицах, сам и разбирайся. Не надо грузить людей проблемами, которые вызваны твоими личными экспериментами.
Тем более что про изменение коллэйтов и чарсетов написано в
www.ibase.ru/devinfo/ibrusfaq.htm