powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выходит ошибка в запросе
17 сообщений из 17, страница 1 из 1
Выходит ошибка в запросе
    #40095590
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер, есть запрос, запускаю его в ibexpert нормально отрабатывает.

Запускаю в программе, выходит ошибка, не пойму почему

Вот запрос

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
select distinct(s.glpu) as glpu,
        Count(s.id_sluch) as cnt,
        sum(iif(s.id_povod<>'',1,0)) as def,
        sum(s.summa_v) as SumVOZV,
        sum(ROUND(s.summa_m,2)) as SumSHTRAF,
        sum(s.summa_disp) as SumDISP,
        sum(iif(s.usl_ok=4,s.summa_v,0)) smp,
        sum(iif(sp.t_type=4 or sp.t_type=44,s.summa_disp,0)) as disp1etap,
        sum(iif(sp.t_type=7,s.summa_disp,0)) as disp2etap,
        sum(iif(sp.t_type=3,s.summa_disp,0)) as dispds,
        sum(iif(sp.t_type=33,s.summa_disp,0)) as dispuds,
        sum(iif(sp.t_type=8,s.summa_disp,0)) as profmed,
        0 as vmp ,
        sum(Round(s.sp_sum,2)) as sp_sum
   from GET_SNK_ALL(:glpu,:date1,:date2) s
            left join sp_tarif sp on sp.ksg=s.code_usl
            left join vid_exp v on v.kod=s.tip_exp
    where s.tip=2 and :tip=v.tip_exp group by glpu

    union all

    select distinct(s.glpu) as glpu,
            Count(s.id_sluch) as cnt,
            sum(iif(s.id_povod<>'',1,0)) as def,
            sum(s.summa_v) as SumVOZV,
            sum(CAST(s.summa_m as numeric(9,2))) as SumSHTRAF,
            sum(s.summa_disp) as SumDISP,
            0 as smp,
            0 as disp1etap,
            0 as disp2etap,
            0 as dispds,
            0 as dispuds,
            0 as profmed,
            sum(s.vmp) as vmp,
            0 as sp_sum
    from GET_SNK_ALL(:glpu,:date1,:date2) s
        left join vid_exp v on v.kod=s.tip_exp

    where s.tip=1 and :tip=v.tip_exp group by glpu



Ощибка выходит следующая
...
Рейтинг: 0 / 0
Выходит ошибка в запросе
    #40095595
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMag,

Такое впечатление, что где-то в процедуре идет склейка юнионов, и очень большая.
...
Рейтинг: 0 / 0
Выходит ошибка в запросе
    #40095597
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

Самое интересное, на одном компьютере работает, а на другом нет
...
Рейтинг: 0 / 0
Выходит ошибка в запросе
    #40095601
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разные БД, разные процедуры.
...
Рейтинг: 0 / 0
Выходит ошибка в запросе
    #40095611
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код процедуры

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
BEGIN
    k=0;
    FOR SELECT A.TABLENAME FROM alltables A INTO :TABLENAME DO
        BEGIN
            k=k+1;
            TABL=cast(tablename as varchar(10));
                begin
                    sql='select 2 as tip,s.ID_SLUCH,KSG,KRAT,ID_POVOD,ID_EXP,S.MCOD,GLPU,ROUND(SP_SUM,2),ROUND(SUMMA_DISP,2),s.DATA_L,s.TIP_EXP, 0 as VMP,ROUND(SUMMA_VOZM,2),ROUND(SUMMA_M,2),ROUND(SUMMA_V,2),ROUND(SUM_OPL,2),DATA_EXP,MKB,0 as KD,ID_UT,t.nhistory,m.umpname,s.comment,t.id_pac,t.usl_ok,t.date_1,t.date_2,P.prname AS PODR,u.code_usl from snk'||tabl||' s left join tt05s50'||tabl||' t on t.id_sluch_tt=s.id_sluch left join ut05s50'||tabl||' u on (u.id_sluch=s.id_sluch and u.idserv=s.id_ut) left join uslmp m on m.idump=t.usl_ok LEFT JOIN PROFOT P ON P.IDPR=U.PROFIL where s.DATA_EXP BETWEEN :a and :b AND S.GLPU=:G union all select 1 as tip,s.ID_SLUCH,KSG,KRAT,ID_POVOD,ID_EXP,S.MCOD,GLPU,0 as SP_SUM,0 as SUMMA_DISP,s.DATA_L,s.TIP_EXP, ROUND(VMP,2),ROUND(SUMMA_VOZM,2),ROUND(SUMMA_M,2),ROUND(SUMMA_V,2),ROUND(SUM_OPL,2),DATA_EXP,MKB,s.KD,ID_UT,t.nhistory,m.umpname,s.comment,t.id_pac,t.usl_ok,t.date_1,t.date_2,P.IOTD AS PODR,u.code_usl from snk_stac'||tabl||' s left join tt05s50'||tabl||' t on t.id_sluch_tt=s.id_sluch left join ut05s50'||tabl||' u on (u.id_sluch=s.id_sluch and u.idserv=s.id_ut) left join uslmp m on m.idump=t.usl_ok left join stacotd p on (p.mcod=u.lpu_1 and p.kotd=u.podr) where s.DATA_EXP BETWEEN :a and :b AND S.GLPU=:G';
                    for  EXECUTE STATEMENT (:Sql) (a := :date1,b:=:date2,G:=:GL) into :tip,:ID_SLUCH,:KSG,:KRAT,:ID_POVOD,:ID_EXP,:MCOD,:GLPU,:SP_SUM,:SUMMA_DISP,:DATA_L,:TIP_EXP, :VMP,:SUMMA_VOZM,:SUMMA_M,:SUMMA_V,:SUM_OPL,:DATA_EXP,:MKB,:KD,:ID_UT,:nhistory,:umpname,:comment,:id_pac,:usl_ok,:date_1,:date_2,:PODR,:code_usl do suspend; end
        END
END



Не пойму почему выходит данная ошибка

Процедуры тоже проверил, все нормально.

Ошибка почему выходит никак не пойму.
...
Рейтинг: 0 / 0
Выходит ошибка в запросе
    #40095615
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMag
Код процедуры

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
BEGIN
    k=0;
    FOR SELECT A.TABLENAME FROM alltables A INTO :TABLENAME DO
        BEGIN
            k=k+1;
            TABL=cast(tablename as varchar(10));
                begin
                    sql='select 2 as tip,s.ID_SLUCH,KSG,KRAT,ID_POVOD,ID_EXP,S.MCOD,GLPU,ROUND(SP_SUM,2),ROUND(SUMMA_DISP,2),s.DATA_L,s.TIP_EXP, 0 as VMP,ROUND(SUMMA_VOZM,2),ROUND(SUMMA_M,2),ROUND(SUMMA_V,2),ROUND(SUM_OPL,2),DATA_EXP,MKB,0 as KD,ID_UT,t.nhistory,m.umpname,s.comment,t.id_pac,t.usl_ok,t.date_1,t.date_2,P.prname AS PODR,u.code_usl from snk'||tabl||' s left join tt05s50'||tabl||' t on t.id_sluch_tt=s.id_sluch left join ut05s50'||tabl||' u on (u.id_sluch=s.id_sluch and u.idserv=s.id_ut) left join uslmp m on m.idump=t.usl_ok LEFT JOIN PROFOT P ON P.IDPR=U.PROFIL where s.DATA_EXP BETWEEN :a and :b AND S.GLPU=:G union all select 1 as tip,s.ID_SLUCH,KSG,KRAT,ID_POVOD,ID_EXP,S.MCOD,GLPU,0 as SP_SUM,0 as SUMMA_DISP,s.DATA_L,s.TIP_EXP, ROUND(VMP,2),ROUND(SUMMA_VOZM,2),ROUND(SUMMA_M,2),ROUND(SUMMA_V,2),ROUND(SUM_OPL,2),DATA_EXP,MKB,s.KD,ID_UT,t.nhistory,m.umpname,s.comment,t.id_pac,t.usl_ok,t.date_1,t.date_2,P.IOTD AS PODR,u.code_usl from snk_stac'||tabl||' s left join tt05s50'||tabl||' t on t.id_sluch_tt=s.id_sluch left join ut05s50'||tabl||' u on (u.id_sluch=s.id_sluch and u.idserv=s.id_ut) left join uslmp m on m.idump=t.usl_ok left join stacotd p on (p.mcod=u.lpu_1 and p.kotd=u.podr) where s.DATA_EXP BETWEEN :a and :b AND S.GLPU=:G';
                    for  EXECUTE STATEMENT (:Sql) (a := :date1,b:=:date2,G:=:GL) into :tip,:ID_SLUCH,:KSG,:KRAT,:ID_POVOD,:ID_EXP,:MCOD,:GLPU,:SP_SUM,:SUMMA_DISP,:DATA_L,:TIP_EXP, :VMP,:SUMMA_VOZM,:SUMMA_M,:SUMMA_V,:SUM_OPL,:DATA_EXP,:MKB,:KD,:ID_UT,:nhistory,:umpname,:comment,:id_pac,:usl_ok,:date_1,:date_2,:PODR,:code_usl do suspend; end
        END
END




Не пойму почему выходит данная ошибка

Процедуры тоже проверил, все нормально.

Ошибка почему выходит никак не пойму.
не должно компилиться.
...
Рейтинг: 0 / 0
Выходит ошибка в запросе
    #40095616
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock
LMag
Код процедуры

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
BEGIN
    k=0;
    FOR SELECT A.TABLENAME FROM alltables A INTO :TABLENAME DO
        BEGIN
            k=k+1;
            TABL=cast(tablename as varchar(10));
                begin
                    sql='select 2 as tip,s.ID_SLUCH,KSG,KRAT,ID_POVOD,ID_EXP,S.MCOD,GLPU,ROUND(SP_SUM,2),ROUND(SUMMA_DISP,2),s.DATA_L,s.TIP_EXP, 0 as VMP,ROUND(SUMMA_VOZM,2),ROUND(SUMMA_M,2),ROUND(SUMMA_V,2),ROUND(SUM_OPL,2),DATA_EXP,MKB,0 as KD,ID_UT,t.nhistory,m.umpname,s.comment,t.id_pac,t.usl_ok,t.date_1,t.date_2,P.prname AS PODR,u.code_usl from snk'||tabl||' s left join tt05s50'||tabl||' t on t.id_sluch_tt=s.id_sluch left join ut05s50'||tabl||' u on (u.id_sluch=s.id_sluch and u.idserv=s.id_ut) left join uslmp m on m.idump=t.usl_ok LEFT JOIN PROFOT P ON P.IDPR=U.PROFIL where s.DATA_EXP BETWEEN :a and :b AND S.GLPU=:G union all select 1 as tip,s.ID_SLUCH,KSG,KRAT,ID_POVOD,ID_EXP,S.MCOD,GLPU,0 as SP_SUM,0 as SUMMA_DISP,s.DATA_L,s.TIP_EXP, ROUND(VMP,2),ROUND(SUMMA_VOZM,2),ROUND(SUMMA_M,2),ROUND(SUMMA_V,2),ROUND(SUM_OPL,2),DATA_EXP,MKB,s.KD,ID_UT,t.nhistory,m.umpname,s.comment,t.id_pac,t.usl_ok,t.date_1,t.date_2,P.IOTD AS PODR,u.code_usl from snk_stac'||tabl||' s left join tt05s50'||tabl||' t on t.id_sluch_tt=s.id_sluch left join ut05s50'||tabl||' u on (u.id_sluch=s.id_sluch and u.idserv=s.id_ut) left join uslmp m on m.idump=t.usl_ok left join stacotd p on (p.mcod=u.lpu_1 and p.kotd=u.podr) where s.DATA_EXP BETWEEN :a and :b AND S.GLPU=:G';
                    for  EXECUTE STATEMENT (:Sql) (a := :date1,b:=:date2,G:=:GL) into :tip,:ID_SLUCH,:KSG,:KRAT,:ID_POVOD,:ID_EXP,:MCOD,:GLPU,:SP_SUM,:SUMMA_DISP,:DATA_L,:TIP_EXP, :VMP,:SUMMA_VOZM,:SUMMA_M,:SUMMA_V,:SUM_OPL,:DATA_EXP,:MKB,:KD,:ID_UT,:nhistory,:umpname,:comment,:id_pac,:usl_ok,:date_1,:date_2,:PODR,:code_usl do suspend; end
        END
END





Не пойму почему выходит данная ошибка

Процедуры тоже проверил, все нормально.

Ошибка почему выходит никак не пойму.
не должно компилиться.
А, не, вру.
...
Рейтинг: 0 / 0
Выходит ошибка в запросе
    #40095618
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMagОшибка почему выходит никак не пойму.
прочитай еще раз сообщение об ошибке. Оно означает, что внутри процедуры, view или запроса нельзя "вызвать" больше 255 селектов.
А у тебя execute statement с разными таблицами в цикле. Таблиц, часом, не тыща штук?
...
Рейтинг: 0 / 0
Выходит ошибка в запросе
    #40095619
LMag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

Вызывается 19 раз в цикле.

Удивительно, что данный запрос работает на одном компьютере, а на другом выходит данная ошибка.
Хотя все одинаково.
Не пойму.
А так ошибку прочитал.
Но не пойму где там 255 вызовов select
...
Рейтинг: 0 / 0
Выходит ошибка в запросе
    #40095620
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
прочитай еще раз сообщение об ошибке. Оно означает, что внутри процедуры, view или запроса нельзя "вызвать" больше 255 селектов.
А у тебя execute statement с разными таблицами в цикле. Таблиц, часом, не тыща штук?
Хоть десять тыщщ - это разные запросы с разными контекстами.

Но одна из этих таблиц может оказаться view и результирующий запрос в ES может наступить на данное ограничение. Тем более, что там union двух join из 5-ти таблиц каждый:

LMag
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
from 
snk'||tabl||' s 
left join tt05s50'||tabl||' t 
left join ut05s50'||tabl||' u 
left join uslmp m 
LEFT JOIN PROFOT P 

union all 

from 
snk_stac'||tabl||' s 
left join tt05s50'||tabl||' t 
join ut05s50'||tabl||' u 
left join uslmp m 
left join stacotd p 

...
Рейтинг: 0 / 0
Выходит ошибка в запросе
    #40095621
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMag
Удивительно, что данный запрос работает на одном компьютере, а на другом выходит данная ошибка.
Хотя все одинаково.
Не всё. Ищи.
...
Рейтинг: 0 / 0
Выходит ошибка в запросе
    #40095622
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LMagХотя все одинаково.
Не пойму.
чтобы "всё было одинаково", нужно
- сравнить метаданные (isql -x ... >...) обоих баз.
- сравнить данные, на основе которых производится for select формирование ES.
это как минимум.
Потом - поскольку это вызов процедуры, и там for select suspend, наверняка процедура до exception что-то выдает.
И надо отловить, при каких входных параметрах процедуры происходит ошибка.

В общем, нормальная такая задача по отладке.
...
Рейтинг: 0 / 0
Выходит ошибка в запросе
    #40095700
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

трейсом поймать будет несложно.
...
Рейтинг: 0 / 0
Выходит ошибка в запросе
    #40095732
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad
трейсом поймать будет несложно.
по идее ловить надо до трейса, банально в автономной транзакции фигачить в лог табличку строковую переменную "sql".
...
Рейтинг: 0 / 0
Выходит ошибка в запросе
    #40095736
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv
- сравнить метаданные (isql -x ... >...) обоих баз.

...об е их... :)
...
Рейтинг: 0 / 0
Выходит ошибка в запросе
    #40095750
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky
hvlad
трейсом поймать будет несложно.
по идее ловить надо до трейса, банально в автономной транзакции фигачить в лог табличку строковую переменную "sql".
Можно и так. Но это же надо уметь :)
...
Рейтинг: 0 / 0
Выходит ошибка в запросе
    #40095846
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Былое и думы.

Когда появляется ошибка по исчерпанию некоего лимита - всегда надо смотреть в данные. Не только когда "тута нету а тама есть", а вообще. Как я есть ретроград и консерватор, я бы сказал - имея в виду пересмотреть свой дизайн или принять дополнительные меры по организации процесса и просвещению пользователей. По-современному, по-молодёжному - чтобы потребовать от разработчиков добиться обслуживания любой ахинеи. Помнится, во времена далёкие, теперь почти былинные, когда на количество аргументов в IN было ограничение в полторы тыщи штук, один крендель достал меня с превышением этого лимита. Вскрытие показало следующее. Для запроса в интерфейсе была предоставлена возможность наложения условий фильтрации на ФСЕ , абсолютно все, атрибуты. Для строковых на starting-containing, для остальных диапазонные. И уж на совсем крайний случай совсем уж экзотической выборки - возможность натыкать пальчиком интересующие. В том числе совместно с фильтрующими ограничениями. Однако, следуя парадигме махрового российского еврея - русские программисты му**ки и потому что русские и потому что программисты, и обязательно напорют в своём коде и обманут бедного еврея - не ленился, игнорируя очевидное, натыкивать пальчиком за день тыщи по три записей тупо в диапазоне дат. Не, можно было последовать лозунгу "клиент всегда прав" и поднять бучу. Но, как я тоже есть российский еврей на 1/8, предпочёл послать его на... небо за звёздочками, с соответствующей аргументацией на совете директоров. Подействовало.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Выходит ошибка в запросе
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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