powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка - слишком длинная процедура
25 сообщений из 58, страница 2 из 3
Ошибка - слишком длинная процедура
    #39538383
Няшик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД,

Кхм. У него текст не разу не изменялся в процедуре. Следовательно текст можно вынести в константы - поделить их на составляющие запросы, тем самым укоротив текст в несколько раз. И построить ирархию..

Я пишу фигню? Давайте создадим куча маленьких процедур! Но не боле 5


Код: pascal
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.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils;

const
  a1 = 'SELECT '#13#10 + 'SUM(sum_fact_prr_1) AS s_sum_fact_prr_1, '#13#10 +
    'SUM(sum_fact_other_1) AS s_sum_fact_other_1, '#13#10 +
    'SUM(sum_fact_teo_1) AS s_sum_fact_teo_1, '#13#10 +
    'SUM(sum_fact_fares_1) AS s_sum_fact_fares_1, '#13#10 +
    'SUM(sum_fact_storage_1) AS s_sum_fact_storage_1, '#13#10 +
    'SUM(sum_fact_prr_1) + '#13#10 + 'SUM(sum_fact_other_1) + '#13#10 +
    'SUM(sum_fact_teo_1) + '#13#10 + 'SUM(sum_fact_fares_1) + '#13#10 +
    'SUM(sum_fact_storage_1) AS s_sum_fact_1, '#13#10 +
    'SUM(sum_fact_prr_2) AS s_sum_fact_prr_2, '#13#10 +
    'SUM(sum_fact_other_2) AS s_sum_fact_other_2, '#13#10 +
    'SUM(sum_fact_teo_2) AS s_sum_fact_teo_2, '#13#10 +
    'SUM(sum_fact_fares_2) AS s_sum_fact_fares_2, '#13#10 +
    'SUM(sum_fact_storage_2) AS s_sum_fact_storage_2, '#13#10 +
    'SUM(sum_fact_prr_2) + '#13#10 + 'SUM(sum_fact_other_2) + '#13#10 +
    'SUM(sum_fact_teo_2) + '#13#10 + 'SUM(sum_fact_fares_2) + '#13#10 +
    'SUM(sum_fact_storage_2) AS s_sum_fact_2, '#13#10 +
    'SUM(sum_fact_prr_4) AS s_sum_fact_prr_4, '#13#10 +
    'SUM(sum_fact_other_4) AS s_sum_fact_other_4, '#13#10 +
    'SUM(sum_fact_teo_4) AS s_sum_fact_teo_4, '#13#10 +
    'SUM(sum_fact_fares_4) AS s_sum_fact_fares_4, '#13#10 +
    'SUM(sum_fact_storage_4) AS s_sum_fact_storage_4, '#13#10 +
    'SUM(sum_fact_prr_4) + '#13#10 + 'SUM(sum_fact_other_4) + '#13#10 +
    'SUM(sum_fact_teo_4) + '#13#10 + 'SUM(sum_fact_fares_4) + '#13#10 +
    'SUM(sum_fact_storage_4) AS s_sum_fact_4, '#13#10 +
    'SUM(sum_fact_prr) AS s_sum_fact_prr, '#13#10 +
    'SUM(sum_fact_other) AS s_sum_fact_other, '#13#10 +
    'SUM(sum_fact_teo) AS s_sum_fact_teo, '#13#10 +
    'SUM(sum_fact_fares) AS s_sum_fact_fares, '#13#10 +
    'SUM(sum_fact_storage) AS s_sum_fact_storage, '#13#10 +
    'SUM(sum_fact_prr) + '#13#10 + 'SUM(sum_fact_other) + '#13#10 +
    'SUM(sum_fact_teo) + '#13#10 + 'SUM(sum_fact_fares) + '#13#10 +
    'SUM(sum_fact_storage) AS s_sum_fact '#13#10 + 'FROM ';

  a2 = '(SELECT '#13#10 + 'ROUND('#13#10 +
    'IFNULL((SELECT COALESCE(SUM(iwn.sum_rub), 0) '#13#10 +
    'FROM invoicing_working_norm iwn '#13#10 +
    'INNER JOIN contract_working_norm_rate cwnr ON cwnr.id = iwn.contract_working_norm_rate_id '#13#10
    + 'INNER JOIN additional_service a1 ON a1.id = cwnr.service_id '#13#10 +
    'INNER JOIN report_code rc1 ON rc1.id = a1.report_code_id '#13#10 +
    'INNER JOIN invoicing i ON i.id = iwn.invoicing_id '#13#10 +
    'INNER JOIN cargo_zone cz1 ON cz1.id = i.cargo_zone_id '#13#10 +
    'LEFT JOIN invoice_type it ON it.id = i.invoice_type_id '#13#10 +
    'INNER JOIN contract_cargo_head cch1 ON cch1.id = i.contract_cargo_head_id '#13#10
    + 'INNER JOIN contract c1 ON c1.id = cch1.contract_id '#13#10 +
    'INNER JOIN cargo_nomenclature cn ON cn.id = cch1.cargo_id '#13#10 +
    'WHERE UPPER(it.invoice_type_name) IN (''ИМПОРТ'', ''ЭКСПОРТ'', ''КАБОТАЖ'') '#13#10
    + 'AND i.cooperated = ''Y'' '#13#10 +
    'AND c1.cargo_status = pcp.cargo_status '#13#10 +
    'AND cn.cargo_group_id = cg.id '#13#10 +
    'AND i.cargo_zone_id = cz.id '#13#10 +
    'AND cz1.cargo_zone_number = ''1'' '#13#10 +
    'AND i.invoicing_date BETWEEN :date_from AND :date_to '#13#10 +
    'AND UPPER(rc1.report_code_name) = ''ПЕРЕГРУЗКА''), 0) '#13#10 + '+ '#13#10
    + 'IFNULL((SELECT COALESCE(SUM(e.sum_rub), 0) '#13#10 +
    'FROM invoicing_additional_service_editing e '#13#10 +
    'INNER JOIN additional_service a ON a.id = e.service_id '#13#10 +
    'INNER JOIN report_code rc ON rc.id = a.report_code_id '#13#10 +
    'INNER JOIN invoicing i ON i.id = e.invoicing_id '#13#10 +
    'INNER JOIN cargo_zone cz1 ON cz1.id = i.cargo_zone_id '#13#10 +
    'LEFT JOIN invoice_type it ON it.id = i.invoice_type_id '#13#10 +
    'INNER JOIN contract_cargo_head cch1 ON cch1.id = i.contract_cargo_head_id '#13#10
    + 'INNER JOIN contract c1 ON c1.id = cch1.contract_id '#13#10 +
    'INNER JOIN cargo_nomenclature cn ON cn.id = cch1.cargo_id '#13#10 +
    'WHERE e.show_in_report = ''Y'' '#13#10 +
    'AND UPPER(it.invoice_type_name) IN (''ИМПОРТ'', ''ЭКСПОРТ'', ''КАБОТАЖ'') '#13#10
    + 'AND i.cooperated = ''Y'' '#13#10 +
    'AND c1.cargo_status = pcp.cargo_status '#13#10 +
    'AND cn.cargo_group_id = cg.id '#13#10 +
    'AND i.cargo_zone_id = cz.id '#13#10 +
    'AND cz1.cargo_zone_number = ''1'' '#13#10 +
    'AND i.invoicing_date BETWEEN :date_from AND :date_to '#13#10 +
    'AND UPPER(rc.report_code_name) = ''ПЕРЕГРУЗКА''), 0) '#13#10 +
    ', 2) AS sum_fact_prr_1, '#13#10 + 'FROM plan_cargo_processing pcp '#13#10 +
    'INNER JOIN cargo_group cg ON cg.id = pcp.cargo_group_id '#13#10 +
    'INNER JOIN cargo_zone cz ON cz.id = pcp.cargo_zone_id '#13#10 +
    'WHERE pcp.cooperated = ''Y'' '#13#10 + 'AND pcp.year = :year '#13#10 +
    'AND pcp.month = :month ';

begin
  Writeln(a1);
  Writeln('----------');
  Writeln(a2);
  Readln;

end.

...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538405
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DataModule + DataSet в нем ? Не, не слышали.
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538418
Фотография JayDi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Справедливости ради стоит заметить, что тот же PL/SQL Developer под Оракл подобный код спокойно копипастит из делфи к себе в редактор, автоматом его очищает и приводя к обычному запросу. И в обратном направлении так же из sql в делфи-строчки преобразует. Что-то мне подсказывает, что у автора именно он и стоит.
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538420
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может проще все же хранимку использовать? Вообще не люблю sql запросы в программе, а вдруг в запросе что-то добавить или поменять надо, пересобирать клиент. Тогда уж лучше храните свой запрос в БД, загружайте оттуда и пихайте куда хотите.
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538422
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JaDiСправедливости ради стоит заметить, что тот же PL/SQL Developer под Оракл подобный код спокойно копипастит из делфи к себе в редактор, автоматом его очищает и приводя к обычному запросу. И в обратном направлении так же из sql в делфи-строчки преобразует. Что-то мне подсказывает, что у автора именно он и стоит.
У меня EMS SQL Manager for MySQL.
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538423
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эндиМожет проще все же хранимку использовать? Вообще не люблю sql запросы в программе, а вдруг в запросе что-то добавить или поменять надо, пересобирать клиент. Тогда уж лучше храните свой запрос в БД, загружайте оттуда и пихайте куда хотите.
Пробовал работать с хранимками, не понравилось по нескольким причинам. Требует все имена полей перечислять (с алиасами, хотя это и хорошая привычка), по-моему нельзя просто звездочку поставить. Приводит хранимку к какому-то своему неудобочитаемому виду. Если требуется отредактировать, это не так просто. Не прижились они у меня.
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538424
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НяшикчччД,

Кхм. У него текст не разу не изменялся в процедуре. Следовательно текст можно вынести в константы - поделить их на составляющие запросы, тем самым укоротив текст в несколько раз. И построить ирархию..

Я пишу фигню? Давайте создадим куча маленьких процедур! Но не боле 5


Код: pascal
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.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
program Project1;

{$APPTYPE CONSOLE}
{$R *.res}

uses
  System.SysUtils;

const
  a1 = 'SELECT '#13#10 + 'SUM(sum_fact_prr_1) AS s_sum_fact_prr_1, '#13#10 +
    'SUM(sum_fact_other_1) AS s_sum_fact_other_1, '#13#10 +
    'SUM(sum_fact_teo_1) AS s_sum_fact_teo_1, '#13#10 +
    'SUM(sum_fact_fares_1) AS s_sum_fact_fares_1, '#13#10 +
    'SUM(sum_fact_storage_1) AS s_sum_fact_storage_1, '#13#10 +
    'SUM(sum_fact_prr_1) + '#13#10 + 'SUM(sum_fact_other_1) + '#13#10 +
    'SUM(sum_fact_teo_1) + '#13#10 + 'SUM(sum_fact_fares_1) + '#13#10 +
    'SUM(sum_fact_storage_1) AS s_sum_fact_1, '#13#10 +
    'SUM(sum_fact_prr_2) AS s_sum_fact_prr_2, '#13#10 +
    'SUM(sum_fact_other_2) AS s_sum_fact_other_2, '#13#10 +
    'SUM(sum_fact_teo_2) AS s_sum_fact_teo_2, '#13#10 +
    'SUM(sum_fact_fares_2) AS s_sum_fact_fares_2, '#13#10 +
    'SUM(sum_fact_storage_2) AS s_sum_fact_storage_2, '#13#10 +
    'SUM(sum_fact_prr_2) + '#13#10 + 'SUM(sum_fact_other_2) + '#13#10 +
    'SUM(sum_fact_teo_2) + '#13#10 + 'SUM(sum_fact_fares_2) + '#13#10 +
    'SUM(sum_fact_storage_2) AS s_sum_fact_2, '#13#10 +
    'SUM(sum_fact_prr_4) AS s_sum_fact_prr_4, '#13#10 +
    'SUM(sum_fact_other_4) AS s_sum_fact_other_4, '#13#10 +
    'SUM(sum_fact_teo_4) AS s_sum_fact_teo_4, '#13#10 +
    'SUM(sum_fact_fares_4) AS s_sum_fact_fares_4, '#13#10 +
    'SUM(sum_fact_storage_4) AS s_sum_fact_storage_4, '#13#10 +
    'SUM(sum_fact_prr_4) + '#13#10 + 'SUM(sum_fact_other_4) + '#13#10 +
    'SUM(sum_fact_teo_4) + '#13#10 + 'SUM(sum_fact_fares_4) + '#13#10 +
    'SUM(sum_fact_storage_4) AS s_sum_fact_4, '#13#10 +
    'SUM(sum_fact_prr) AS s_sum_fact_prr, '#13#10 +
    'SUM(sum_fact_other) AS s_sum_fact_other, '#13#10 +
    'SUM(sum_fact_teo) AS s_sum_fact_teo, '#13#10 +
    'SUM(sum_fact_fares) AS s_sum_fact_fares, '#13#10 +
    'SUM(sum_fact_storage) AS s_sum_fact_storage, '#13#10 +
    'SUM(sum_fact_prr) + '#13#10 + 'SUM(sum_fact_other) + '#13#10 +
    'SUM(sum_fact_teo) + '#13#10 + 'SUM(sum_fact_fares) + '#13#10 +
    'SUM(sum_fact_storage) AS s_sum_fact '#13#10 + 'FROM ';

  a2 = '(SELECT '#13#10 + 'ROUND('#13#10 +
    'IFNULL((SELECT COALESCE(SUM(iwn.sum_rub), 0) '#13#10 +
    'FROM invoicing_working_norm iwn '#13#10 +
    'INNER JOIN contract_working_norm_rate cwnr ON cwnr.id = iwn.contract_working_norm_rate_id '#13#10
    + 'INNER JOIN additional_service a1 ON a1.id = cwnr.service_id '#13#10 +
    'INNER JOIN report_code rc1 ON rc1.id = a1.report_code_id '#13#10 +
    'INNER JOIN invoicing i ON i.id = iwn.invoicing_id '#13#10 +
    'INNER JOIN cargo_zone cz1 ON cz1.id = i.cargo_zone_id '#13#10 +
    'LEFT JOIN invoice_type it ON it.id = i.invoice_type_id '#13#10 +
    'INNER JOIN contract_cargo_head cch1 ON cch1.id = i.contract_cargo_head_id '#13#10
    + 'INNER JOIN contract c1 ON c1.id = cch1.contract_id '#13#10 +
    'INNER JOIN cargo_nomenclature cn ON cn.id = cch1.cargo_id '#13#10 +
    'WHERE UPPER(it.invoice_type_name) IN (''ИМПОРТ'', ''ЭКСПОРТ'', ''КАБОТАЖ'') '#13#10
    + 'AND i.cooperated = ''Y'' '#13#10 +
    'AND c1.cargo_status = pcp.cargo_status '#13#10 +
    'AND cn.cargo_group_id = cg.id '#13#10 +
    'AND i.cargo_zone_id = cz.id '#13#10 +
    'AND cz1.cargo_zone_number = ''1'' '#13#10 +
    'AND i.invoicing_date BETWEEN :date_from AND :date_to '#13#10 +
    'AND UPPER(rc1.report_code_name) = ''ПЕРЕГРУЗКА''), 0) '#13#10 + '+ '#13#10
    + 'IFNULL((SELECT COALESCE(SUM(e.sum_rub), 0) '#13#10 +
    'FROM invoicing_additional_service_editing e '#13#10 +
    'INNER JOIN additional_service a ON a.id = e.service_id '#13#10 +
    'INNER JOIN report_code rc ON rc.id = a.report_code_id '#13#10 +
    'INNER JOIN invoicing i ON i.id = e.invoicing_id '#13#10 +
    'INNER JOIN cargo_zone cz1 ON cz1.id = i.cargo_zone_id '#13#10 +
    'LEFT JOIN invoice_type it ON it.id = i.invoice_type_id '#13#10 +
    'INNER JOIN contract_cargo_head cch1 ON cch1.id = i.contract_cargo_head_id '#13#10
    + 'INNER JOIN contract c1 ON c1.id = cch1.contract_id '#13#10 +
    'INNER JOIN cargo_nomenclature cn ON cn.id = cch1.cargo_id '#13#10 +
    'WHERE e.show_in_report = ''Y'' '#13#10 +
    'AND UPPER(it.invoice_type_name) IN (''ИМПОРТ'', ''ЭКСПОРТ'', ''КАБОТАЖ'') '#13#10
    + 'AND i.cooperated = ''Y'' '#13#10 +
    'AND c1.cargo_status = pcp.cargo_status '#13#10 +
    'AND cn.cargo_group_id = cg.id '#13#10 +
    'AND i.cargo_zone_id = cz.id '#13#10 +
    'AND cz1.cargo_zone_number = ''1'' '#13#10 +
    'AND i.invoicing_date BETWEEN :date_from AND :date_to '#13#10 +
    'AND UPPER(rc.report_code_name) = ''ПЕРЕГРУЗКА''), 0) '#13#10 +
    ', 2) AS sum_fact_prr_1, '#13#10 + 'FROM plan_cargo_processing pcp '#13#10 +
    'INNER JOIN cargo_group cg ON cg.id = pcp.cargo_group_id '#13#10 +
    'INNER JOIN cargo_zone cz ON cz.id = pcp.cargo_zone_id '#13#10 +
    'WHERE pcp.cooperated = ''Y'' '#13#10 + 'AND pcp.year = :year '#13#10 +
    'AND pcp.month = :month ';

begin
  Writeln(a1);
  Writeln('----------');
  Writeln(a2);
  Readln;

end.


В том то и дело, что текст меняется, но каждый раз незначительно, и на практике оказывается проще повторить его весь много раз, чем учитывать мелкие изменения в каждом повторении. Например там в одном случае 'ПЕРЕГРУЗКА', в другом на этом месте 'ТЭО'. В одном запросе джойнится таблица cargo_zone 2 раза, в другом таком же - нет, и т.д.
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538461
ЁлыПалы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
svnvlad,
А километровые портянки скл, стало быть прижились?
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538463
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вынести SQL-код во внешние файлы и грузить их по необходимости не судьба?
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538464
Фотография Virtual Student
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad,

По моему ситуация идеальная для того, чтобы использовать представления (view). Практически все БД имеют такую возможность.
Создав из этого запроса представление вы избавитесь от необходимости подгружать sql-портянку. Переменные можно передавать параметрами.
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538510
zinpub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JaDiСправедливости ради стоит заметить, что тот же PL/SQL Developer под Оракл подобный код спокойно копипастит из делфи к себе в редактор, автоматом его очищает и приводя к обычному запросу. И в обратном направлении так же из sql в делфи-строчки преобразует. Что-то мне подсказывает, что у автора именно он и стоит.

А, если не секрет, как это делается?
Я себе создал макрос в Notepad++, но это лишний копипаст...
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538523
Valery_B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvlad,

Ого, автор решил обойти ограничения компилятора)))
И дальше неожиданное продолжение - ему надавали советов, как это сделать.
Вот веселуха будет всё это поддерживать)

Видимо, в вакансиях пишут "умение разбираться в чужом коде" как раз для этого случая)


А сторед процедуру тут не предлагали использовать, не ?
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538535
ЁлыПалы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Valery_Bsvnvlad,

Ого, автор решил обойти ограничения компилятора)))
И дальше неожиданное продолжение - ему надавали советов, как это сделать.
Вот веселуха будет всё это поддерживать)

Видимо, в вакансиях пишут "умение разбираться в чужом коде" как раз для этого случая)


А сторед процедуру тут не предлагали использовать, не ?

Предлагали, не прижились они у него, говорит :)
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538554
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если присмотреться, то обе части одинаковые
Код: pascal
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.
40.
41.
42.
// подзапрос
  'ROUND('#13#10 +
  'IFNULL((SELECT COALESCE(SUM(iwn.sum_rub), 0) '#13#10 +
  'FROM invoicing_working_norm iwn '#13#10 +
  'INNER JOIN contract_working_norm_rate cwnr ON cwnr.id = iwn.contract_working_norm_rate_id '#13#10 +
  'INNER JOIN additional_service a1 ON a1.id = cwnr.service_id '#13#10 +
  'INNER JOIN report_code rc1 ON rc1.id = a1.report_code_id '#13#10 +
  'INNER JOIN invoicing i ON i.id = iwn.invoicing_id '#13#10 +
  'INNER JOIN cargo_zone cz1 ON cz1.id = i.cargo_zone_id '#13#10 +
  'LEFT JOIN invoice_type it ON it.id = i.invoice_type_id '#13#10 +
  'INNER JOIN contract_cargo_head cch1 ON cch1.id = i.contract_cargo_head_id '#13#10 +
  'INNER JOIN contract c1 ON c1.id = cch1.contract_id '#13#10 +
  'INNER JOIN cargo_nomenclature cn ON cn.id = cch1.cargo_id '#13#10 +
  'WHERE UPPER(it.invoice_type_name) IN (''ИМПОРТ'', ''ЭКСПОРТ'', ''КАБОТАЖ'') '#13#10 +
  'AND i.cooperated = ''Y'' '#13#10 +
  'AND c1.cargo_status = pcp.cargo_status '#13#10 +
  'AND cn.cargo_group_id = cg.id '#13#10 +
  'AND i.cargo_zone_id = cz.id '#13#10 +
  'AND cz1.cargo_zone_number = ''1'' '#13#10 +
  'AND i.invoicing_date BETWEEN :date_from AND :date_to '#13#10 +
  'AND UPPER(rc1.report_code_name) = ''ПЕРЕГРУЗКА''), 0) '#13#10 +
  '+ '#13#10 +
  'IFNULL((SELECT COALESCE(SUM(e.sum_rub), 0) '#13#10 +
  'FROM invoicing_additional_service_editing e '#13#10 +
  'INNER JOIN additional_service a ON a.id = e.service_id '#13#10 +
  'INNER JOIN report_code rc ON rc.id = a.report_code_id '#13#10 +
  'INNER JOIN invoicing i ON i.id = e.invoicing_id '#13#10 +
  'INNER JOIN cargo_zone cz1 ON cz1.id = i.cargo_zone_id '#13#10 +
  'LEFT JOIN invoice_type it ON it.id = i.invoice_type_id '#13#10 +
  'INNER JOIN contract_cargo_head cch1 ON cch1.id = i.contract_cargo_head_id '#13#10 +
  'INNER JOIN contract c1 ON c1.id = cch1.contract_id '#13#10 +
  'INNER JOIN cargo_nomenclature cn ON cn.id = cch1.cargo_id '#13#10 +
  'WHERE e.show_in_report = ''Y'' '#13#10 +
  'AND UPPER(it.invoice_type_name) IN (''ИМПОРТ'', ''ЭКСПОРТ'', ''КАБОТАЖ'') '#13#10 +
  'AND i.cooperated = ''Y'' '#13#10 +
  'AND c1.cargo_status = pcp.cargo_status '#13#10 +
  'AND cn.cargo_group_id = cg.id '#13#10 +
  'AND i.cargo_zone_id = cz.id '#13#10 +
  'AND cz1.cargo_zone_number = ''1'' '#13#10 +
  'AND i.invoicing_date BETWEEN :date_from AND :date_to '#13#10 +
  'AND UPPER(rc.report_code_name) = ''ПЕРЕГРУЗКА''), 0) '#13#10 +
  ', 2) AS sum_fact_prr_1, '#13#10 +
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538560
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zinpub,
пункт в менюA new "Paste from Host Language" function makes it easy to copy SQL statements from a host language like C++, Java, Basic or Pascal. The host language elements are removed and string syntax elements are converted:

https://www.allroundautomations.com/bodyplsqldev100.html
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538565
под ван
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBrЕсли присмотреться, то обе части одинаковые
Код: pascal
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.
40.
41.
42.
// подзапрос
  'ROUND('#13#10 +
  'IFNULL((SELECT COALESCE(SUM(iwn.sum_rub), 0) '#13#10 +
  'FROM invoicing_working_norm iwn '#13#10 +
  'INNER JOIN contract_working_norm_rate cwnr ON cwnr.id = iwn.contract_working_norm_rate_id '#13#10 +
  'INNER JOIN additional_service a1 ON a1.id = cwnr.service_id '#13#10 +
  'INNER JOIN report_code rc1 ON rc1.id = a1.report_code_id '#13#10 +
  'INNER JOIN invoicing i ON i.id = iwn.invoicing_id '#13#10 +
  'INNER JOIN cargo_zone cz1 ON cz1.id = i.cargo_zone_id '#13#10 +
  'LEFT JOIN invoice_type it ON it.id = i.invoice_type_id '#13#10 +
  'INNER JOIN contract_cargo_head cch1 ON cch1.id = i.contract_cargo_head_id '#13#10 +
  'INNER JOIN contract c1 ON c1.id = cch1.contract_id '#13#10 +
  'INNER JOIN cargo_nomenclature cn ON cn.id = cch1.cargo_id '#13#10 +
  'WHERE UPPER(it.invoice_type_name) IN (''ИМПОРТ'', ''ЭКСПОРТ'', ''КАБОТАЖ'') '#13#10 +
  'AND i.cooperated = ''Y'' '#13#10 +
  'AND c1.cargo_status = pcp.cargo_status '#13#10 +
  'AND cn.cargo_group_id = cg.id '#13#10 +
  'AND i.cargo_zone_id = cz.id '#13#10 +
  'AND cz1.cargo_zone_number = ''1'' '#13#10 +
  'AND i.invoicing_date BETWEEN :date_from AND :date_to '#13#10 +
  'AND UPPER(rc1.report_code_name) = ''ПЕРЕГРУЗКА''), 0) '#13#10 +
  '+ '#13#10 +
  'IFNULL((SELECT COALESCE(SUM(e.sum_rub), 0) '#13#10 +
  'FROM invoicing_additional_service_editing e '#13#10 +
  'INNER JOIN additional_service a ON a.id = e.service_id '#13#10 +
  'INNER JOIN report_code rc ON rc.id = a.report_code_id '#13#10 +
  'INNER JOIN invoicing i ON i.id = e.invoicing_id '#13#10 +
  'INNER JOIN cargo_zone cz1 ON cz1.id = i.cargo_zone_id '#13#10 +
  'LEFT JOIN invoice_type it ON it.id = i.invoice_type_id '#13#10 +
  'INNER JOIN contract_cargo_head cch1 ON cch1.id = i.contract_cargo_head_id '#13#10 +
  'INNER JOIN contract c1 ON c1.id = cch1.contract_id '#13#10 +
  'INNER JOIN cargo_nomenclature cn ON cn.id = cch1.cargo_id '#13#10 +
  'WHERE e.show_in_report = ''Y'' '#13#10 +
  'AND UPPER(it.invoice_type_name) IN (''ИМПОРТ'', ''ЭКСПОРТ'', ''КАБОТАЖ'') '#13#10 +
  'AND i.cooperated = ''Y'' '#13#10 +
  'AND c1.cargo_status = pcp.cargo_status '#13#10 +
  'AND cn.cargo_group_id = cg.id '#13#10 +
  'AND i.cargo_zone_id = cz.id '#13#10 +
  'AND cz1.cargo_zone_number = ''1'' '#13#10 +
  'AND i.invoicing_date BETWEEN :date_from AND :date_to '#13#10 +
  'AND UPPER(rc.report_code_name) = ''ПЕРЕГРУЗКА''), 0) '#13#10 +
  ', 2) AS sum_fact_prr_1, '#13#10 +



Дима, по ходу, тебе самому пора к окулисту - советую как специалист, видящий разницу между a1 ON a1.id и a ON a.id
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538580
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЁлыПалыне прижились они у него, говорит :)мускл может и не умеет рефкурсоры по динамическим запросам вертать из процедур но уж резалтсеты-то в принципе должен наверное
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538583
zinpub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ma1tus,

Спасибо!
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538642
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
под ванДима, по ходу, тебе самому пора к окулисту - советую как специалист, видящий разницу между a1 ON a1.id и a ON a.id
Серьёзно ? А ничего, что в первом алиас А, а во втором А1. Это что-то меняет ?
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538795
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrпод ванДима, по ходу, тебе самому пора к окулисту - советую как специалист, видящий разницу между a1 ON a1.id и a ON a.id
Серьёзно ? А ничего, что в первом алиас А, а во втором А1. Это что-то меняет ?

Это издержки кода. Конечно можно в обоих случаях оставить A.
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538796
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Virtual Studentsvnvlad,

По моему ситуация идеальная для того, чтобы использовать представления (view). Практически все БД имеют такую возможность.
Создав из этого запроса представление вы избавитесь от необходимости подгружать sql-портянку. Переменные можно передавать параметрами.
А каким образом можно использовать параметры во вьюшках? Я не нашел. Был где-то обходной маневр, но это не рекомендовалось.
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538816
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начал разбираться с хранимыми процедурами, пока не очень понимаю, или туплю, если вместо внутреннего скалярного подзапроса вставить хранимку с параметрами, то как осуществлять ее вызов, если туда надо передать значения внешнего запроса?
Там ведь есть участок, где скалярный подзапрос соединяется с внешним:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
....
  'AND c1.cargo_status = pcp.cargo_status '#13#10 +
  'AND cn.cargo_group_id = cg.id '#13#10 +
  'AND i.cargo_zone_id = cz.id '#13#10 +
  'AND cz1.cargo_zone_number = ''1'' '#13#10 +
  'AND i.invoicing_date BETWEEN :date_from AND :date_to '#13#10 +
  'AND UPPER(rc1.report_code_name) = ''ПЕРЕГРУЗКА''), 0) '#13#10 +


Вот с этим внешним запросом
Код: pascal
1.
2.
3.
4.
5.
6.
7.
  ...
  'FROM plan_cargo_processing pcp '#13#10 +
  'INNER JOIN cargo_group cg ON cg.id = pcp.cargo_group_id '#13#10 +
  'INNER JOIN cargo_zone cz ON cz.id = pcp.cargo_zone_id '#13#10 +
  'WHERE pcp.cooperated = ''Y'' '#13#10 +
  'AND pcp.year = :year '#13#10 +
  'AND pcp.month = :month '



И как CALL MyProc() отобразить в запросе как значение поля, то что было вот этим?
Код: pascal
1.
2.
...
', 2) AS sum_fact_prr_1, 
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538830
svnvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrЕсли присмотреться, то обе части одинаковые
Код: pascal
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.
40.
41.
42.
// подзапрос
  'ROUND('#13#10 +
  'IFNULL((SELECT COALESCE(SUM(iwn.sum_rub), 0) '#13#10 +
  'FROM invoicing_working_norm iwn '#13#10 +
  'INNER JOIN contract_working_norm_rate cwnr ON cwnr.id = iwn.contract_working_norm_rate_id '#13#10 +
  'INNER JOIN additional_service a1 ON a1.id = cwnr.service_id '#13#10 +
  'INNER JOIN report_code rc1 ON rc1.id = a1.report_code_id '#13#10 +
  'INNER JOIN invoicing i ON i.id = iwn.invoicing_id '#13#10 +
  'INNER JOIN cargo_zone cz1 ON cz1.id = i.cargo_zone_id '#13#10 +
  'LEFT JOIN invoice_type it ON it.id = i.invoice_type_id '#13#10 +
  'INNER JOIN contract_cargo_head cch1 ON cch1.id = i.contract_cargo_head_id '#13#10 +
  'INNER JOIN contract c1 ON c1.id = cch1.contract_id '#13#10 +
  'INNER JOIN cargo_nomenclature cn ON cn.id = cch1.cargo_id '#13#10 +
  'WHERE UPPER(it.invoice_type_name) IN (''ИМПОРТ'', ''ЭКСПОРТ'', ''КАБОТАЖ'') '#13#10 +
  'AND i.cooperated = ''Y'' '#13#10 +
  'AND c1.cargo_status = pcp.cargo_status '#13#10 +
  'AND cn.cargo_group_id = cg.id '#13#10 +
  'AND i.cargo_zone_id = cz.id '#13#10 +
  'AND cz1.cargo_zone_number = ''1'' '#13#10 +
  'AND i.invoicing_date BETWEEN :date_from AND :date_to '#13#10 +
  'AND UPPER(rc1.report_code_name) = ''ПЕРЕГРУЗКА''), 0) '#13#10 +
  '+ '#13#10 +
  'IFNULL((SELECT COALESCE(SUM(e.sum_rub), 0) '#13#10 +
  'FROM invoicing_additional_service_editing e '#13#10 +
  'INNER JOIN additional_service a ON a.id = e.service_id '#13#10 +
  'INNER JOIN report_code rc ON rc.id = a.report_code_id '#13#10 +
  'INNER JOIN invoicing i ON i.id = e.invoicing_id '#13#10 +
  'INNER JOIN cargo_zone cz1 ON cz1.id = i.cargo_zone_id '#13#10 +
  'LEFT JOIN invoice_type it ON it.id = i.invoice_type_id '#13#10 +
  'INNER JOIN contract_cargo_head cch1 ON cch1.id = i.contract_cargo_head_id '#13#10 +
  'INNER JOIN contract c1 ON c1.id = cch1.contract_id '#13#10 +
  'INNER JOIN cargo_nomenclature cn ON cn.id = cch1.cargo_id '#13#10 +
  'WHERE e.show_in_report = ''Y'' '#13#10 +
  'AND UPPER(it.invoice_type_name) IN (''ИМПОРТ'', ''ЭКСПОРТ'', ''КАБОТАЖ'') '#13#10 +
  'AND i.cooperated = ''Y'' '#13#10 +
  'AND c1.cargo_status = pcp.cargo_status '#13#10 +
  'AND cn.cargo_group_id = cg.id '#13#10 +
  'AND i.cargo_zone_id = cz.id '#13#10 +
  'AND cz1.cargo_zone_number = ''1'' '#13#10 +
  'AND i.invoicing_date BETWEEN :date_from AND :date_to '#13#10 +
  'AND UPPER(rc.report_code_name) = ''ПЕРЕГРУЗКА''), 0) '#13#10 +
  ', 2) AS sum_fact_prr_1, '#13#10 +


Они все-таки не совсем одинаковые. В первой джойн идет с таблицей iwn, во второй - с таблицей e.
Во второй есть строка WHERE e.show_in_report = ''Y''.
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538841
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladА каким образом можно использовать параметры во вьюшках? Я не нашел. Был где-то обходной маневр, но это не рекомендовалось.
Никаким, вьюшки это объединение таблиц

svnvladпока не очень понимаю, или туплю, если вместо внутреннего скалярного подзапроса вставить хранимку с параметрами, то как осуществлять ее вызов
Весь нужный запрос пишется в хранимой процедуре, а из Delphi вызывается эта хранимка
...
Рейтинг: 0 / 0
Ошибка - слишком длинная процедура
    #39538844
vavan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svnvladкаким образом можно использовать параметры во вьюшках?тупо к select from view приделывать where-clause в надежде что сервер сдюжит, сам подобным грешен
...
Рейтинг: 0 / 0
25 сообщений из 58, страница 2 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Ошибка - слишком длинная процедура
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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