powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ошибка в UNION при рекурсии
31 сообщений из 31, показаны все 2 страниц
Ошибка в UNION при рекурсии
    #38804822
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго!
Firebird 2.5
Есть таблица иерархическая, категории товаров и товары в ней.
Пишу селект
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
WITH RECURSIVE TREE
AS (SELECT T.G_PRODUCT,
           T.NAME AS ARTICUL,
           --'' AS NAME,
           T.IS_CATEGORY
      FROM G_PRODUCT T
     WHERE T.G_PRODUCT_PAR IS NULL
    UNION ALL
    SELECT T.G_PRODUCT,
           T.ARTICUL,
           --T.NAME,
           T.IS_CATEGORY
      FROM G_PRODUCT T INNER JOIN TREE PRIOR ON PRIOR.G_PRODUCT = T.G_PRODUCT_PAR
    )
SELECT * FROM TREE


Все работает отлично. Но как только раскомментарю строку "--'' AS NAME," тут же выходит ошибка: Arithmetic overflow or devision by zero.
Пробовал менять и на "NULL AS NAME," и "'DD' AS NAME," - результат тот же. Что делать? Причем если этот юнион вынести отдельно, то работает на ура
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38804826
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуй CAST(... AS VARCHAR())
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38804827
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aidynchik,

а может всё же "string truncation" ?

Тип колонки задаётся в первом члене union. Сделай там каст к варчару нужной длины.
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38804851
aidynchik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, мужики спасибо!
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38805064
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladТип колонки задаётся в первом члене union.
Это в стандарте так прописано? Или у нас таки есть шанс? :)
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38805153
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeehvladТип колонки задаётся в первом члене union.
Это в стандарте так прописано?Это - насколько я помню.
Стандарт сам ковыряй, если приспичило.
NickDeeИли у нас таки есть шанс? :)
Если я правильно понимаю кто такие "вы" - нет шансов у "вас" нет.

PS по соображениям [само]цензуры не раскрываю своё понимание "вас"
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38805451
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladPS по соображениям [само]цензуры не раскрываю своё понимание "вас"
Если у вас правильное понимание меня, тогда вы тем более должны понимать что нужно сделать для того чтобы у FB было хорошее будущее, с довольными пользователями и довольными разработчиками :)
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38805455
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

одно дело когда человек пишет про явные баги, и другое дело - когда он себя считает "большинством", и от имени этого мифического большинства толкает речи с броневика.

Ладно бы в стандарте был совсем какой-то бред. Тогда еще понятно. Но класть болт на стандарт из-за NickDee? Который и не спонсор, к тому же...
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38805469
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvНо класть болт на стандарт из-за NickDee? Который и не спонсор, к тому же...
Вопрос в удобстве конечных потребителей.

Если для варчаров будет браться максимальная длина, а не длина из первого select-а, то стандарту это не навредит, а пользователи получат ожидаемое поведение.
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38805477
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeЕсли для варчаров будет браться максимальная длина, а не длина из первого
select-а, то стандарту это не навредит, а пользователи получат...
....тормоза, перерасход памяти и ошибки выхода за ограничение ширины выборки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38805492
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovNickDeeЕсли для варчаров будет браться максимальная длина, а не длина из первого
select-а, то стандарту это не навредит, а пользователи получат...
....тормоза, перерасход памяти и ошибки выхода за ограничение ширины выборки.

Я про другую максимальную длину. В нашем примере: Max(length(''), length(type of G_PRODUCT.NAME))
Сейчас Max нужно высчитывать вручную, чтобы облом не случился.
Более того, если посчитать плохо, то может оказаться что при некотором особо длинном G_PRODUCT.NAME всё поломается, и поломается неизвестно когда.
То же самое может случиться и при правильном подсчёте, но после "alter table G_PRODUCT alter NAME type VARCHAR(N)", где N чуть больше старого. Понятно что после этого по стандарту нужно пойти и поменять в нужных местах код. Но пользователь то об этом не знает, и врядли помнит что он год назад писал запрос с UNION, где кастовал '' к VARCHAR(K).
И чего бы, спрашивается, не посчитать это движку?
Особенно забавно когда пользователь строит динамический union по нескольким cправочникам с разной длиной поля NAME. Нужно не забыть кастануть NAME в первом селекте к VARCHAR(1024), на всякий случай, чтобы уж точно вошло, не высчитывать же вручную длину столбцов. И тогда уже да, перерасход памяти и тормоза.
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38805496
olegenty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 NickDee - а на домен заложиться, вместо type varchar(n). Попытка изменения размера varachar домена заставит проапдейтить всё везде.
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38805509
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeЯ про другую максимальную длину. В нашем примере: Max(length(''), length(type of G_PRODUCT.NAME))
Сейчас Max нужно высчитывать вручную, чтобы облом не случился.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SQL> create table t1(t varchar(1));
SQL> create table t2(t varchar(2));
SQL> insert into t1(t) values('ё');
SQL> insert into t1(t) values('Ё');
SQL> insert into t2(t) values('аЯ');
SQL> select t "Столбец" from t1 union all select t from t2;

Столбец
=======
ё
Ё
аЯ

SQL> insert into t1(t) values('ёЁ');
Statement failed, SQLSTATE = 22001
arithmetic exception, numeric overflow, or string truncation
-string right truncation
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38805514
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
типы результирующих столбцов юниона выводятся на основании всех его частей. Из первой части берутся лишь имена для столбцов VIEW.

так что тут что-то другое. Склероз мне подсказывает, что (1) это уже всплывало ранее и (2) проблема на самом деле в CTE.
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38805536
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. SidorovNickDeeЯ про другую максимальную длину. В нашем примере: Max(length(''), length(type of G_PRODUCT.NAME))
Сейчас Max нужно высчитывать вручную, чтобы облом не случился.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SQL> create table t1(t varchar(1));
SQL> create table t2(t varchar(2));
SQL> insert into t1(t) values('ё');
SQL> insert into t1(t) values('Ё');
SQL> insert into t2(t) values('аЯ');
SQL> select t "Столбец" from t1 union all select t from t2;

Столбец
=======
ё
Ё
аЯ

SQL> insert into t1(t) values('ёЁ');
Statement failed, SQLSTATE = 22001
arithmetic exception, numeric overflow, or string truncation
-string right truncation


hvladТип колонки задаётся в первом члене union. Сделай там каст к варчару нужной длины.
Уверенным твёрдым голосом :) Так или иначе - минус один миф, плюс один баг :)
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38805545
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

я в тебе не ошибся, тролль.
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38805547
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitr,

в CTE формат записи определяется по нерекурсивному члену, ибо рекурсивный временно отключен, т.к. он рекурсивный и не может быть обработан сразу.
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38805557
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladя в тебе не ошибся, тролль.
Если ты не ошибся, и на самом деле понимаешь что происходит, тогда ты знаешь что нужно сделать чтобы FB стало хорошо.
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38805578
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

ты списочек (счет) ведешь? количетство твоих удовлетворенных/неудовлетворенных пожеланий?
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38805592
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvты списочек (счет) ведешь? количетство твоих удовлетворенных/неудовлетворенных пожеланий?
Нет, не веду. К чему вопрос?
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38805646
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeНет, не веду. К чему вопрос?
зря не ведешь. вопрос ни к чему. у тебя много дурацких идей, и я думал, ты записываешь счет борьбы NickDee vs FirebirdDevelopers. Можно было бы хотя бы оценить полезный выхлоп.
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38805742
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv> борьбы NickDee vs FirebirdDevelopers.

Я бы сказал vs World, поскольку большинство его идей не
только у птицеводов не находят понимания и поддержки,
а вообще у большинства коммьюнити, ИМХО.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38805892
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гоните его накуй.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38806476
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамkdv> борьбы NickDee vs FirebirdDevelopers.

Я бы сказал vs World, поскольку большинство его идей не
только у птицеводов не находят понимания и поддержки,
а вообще у большинства коммьюнити, ИМХО.

Я несколько раз (больше трёх) видел на форуме призыв к убиранию тебя. Не знаю почему некоторые члены коммьюнити так на тебя реагируют. Возможно твои высказывания не находят у них поддержки :)

Вы зря переводите фокус внимания с реальных проблем FB на меня. Я FB точно не враг.
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38806486
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hello, Nickdee!
You wrote on 14 ноября 2014 г. 15:20:30:

NickdeeВы зря переводите фокус внимания с реальных проблем FB на
меня. Я FB точно не враг. обычное тупое трололо.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38806517
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> Я несколько раз (больше трёх)

Больше трёх - это очень скромно, скорее ближе к трём десяткам.
Но не потому что я высказал какую-то сумасбродную идею, что
сервер обязательно должен из хвоста запроса вытащить тип поля,
хранить имена полей/таблиц регистрочувствительно без кавычек
или что должны быть безразмерные поля/индексы/запросы и пр.

> Вы зря переводите фокус внимания

Мы не переводим никакой фокус внимания, тем более на тебя,
тем более никого никому не объявляли врагом. Расслабься.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38806539
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDeeВы зря переводите фокус внимания с реальных проблем FBУ тебя несколько странное понимание реальности...

И провокационные способы сообщать об "реальных проблемах FB".
Из-за этого к тебе уже особое отношение (у меня как минимум) и что-то действительно важное может быть просто проигнорировано
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38806569
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad> Из-за этого к тебе уже особое отношение (у меня как минимум)
hvlad> и что-то действительно важное может быть просто проигнорировано

Так точно. Уже давно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38806752
NickDee
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladИ провокационные способы сообщать об "реальных проблемах FB".
Обычные способы не всегда работают.
hvladИз-за этого к тебе уже особое отношение (у меня как минимум) и что-то действительно важное может быть просто проигнорированоА если я поменяю ник, и начну разговаривать по-существу, как девелопер-пользователь с девелопером-разработчиком FB?
Хотя я уже пытался. Вот моя первая тема тут: 6384525 . Все "позабирались на стулья" и назвали меня валенком. Первый "диагноз" поставил Dimitry Sibiryakov: 6384736 , потом некая тема "достала" Гаджимурадова Рустама: 6384816 , потом kdv сказал мол "плохо быть непонятливым" 6385017 . В процессе обсуждения всплыли некоторые дыри и огрехи в пониманиях самих этих людей (как оно обычно тут и происходит из раза в раз). Может это sql.ru так на всех действует. Вот в трекере и в fb-devel такого нет. Хотя наверное смотря на ник NickDee в трекере, уже некоторые ожидают что я и там буду так же себя вести. Хотя, с другой стороны, я же не ожидаю что Dmitry Sibyryakov или dimitr или hvlad будут в трекере или fb-devel вести себя так же как на sql.ru. Я конечно же делаю поправку на место (и на контекст).
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38806759
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee> А если я поменяю ник, и начну разговаривать по-существу

Аминь. Для этого даже ник менять вовсе не нужно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Ошибка в UNION при рекурсии
    #38806794
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NickDee,

просто есть вагон и маленькая тележка действительно насущных проблем, а без того о чём ты говоришь обойтись можно
...
Рейтинг: 0 / 0
31 сообщений из 31, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Ошибка в UNION при рекурсии
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]