powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / CR-XI. Уж больно непродуктивно запросы ходят.
2 сообщений из 2, страница 1 из 1
CR-XI. Уж больно непродуктивно запросы ходят.
    #35510650
Kruchinin Pahan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть у меня 2 базы данных, создаю 2 коннекта, и 3 запроса по БД. Ожидаю, что CR выполнит все запросы, а затем приджойнит одно к другому. Как бы не так, CR получает первый запрос, сканирует его и на каждом кортеже вызывает второй запрос. Далее, второй запрос сканируется и на каждом его кортеже вызывается третий запрос. В любом случае, логи сервера сообщают, что сервак просто бомбардируется запросами. Есть какой-нибудь способ попросить кристал как-то иначе сджойнить 3 запроса?
Код: plaintext
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.
X:\DATA\AKCIONER\DATA\AKC_DVD.DBC
SELECT
   lic.kod AS lic_id,
   speriod.kod AS kodsperiod,
   akc.date_act AS date_act_akc,
   MAX(lic.name) AS name,
   MAX(NVL(speriod.name, "Не определен период начисления дивидендов")) AS namesperiod,
   SUM(akc.kol_akc) AS kol_akc,
   SUM(akc.sum_dvd) AS sum_dvd,
   SUM(akc.sum_nlg) AS sum_nlg,
   SUM(akc.summa) AS summa
 FROM akc_dvd!lic
    INNER JOIN akc_dvd!akc 
       ON lic.kod = akc.lic_id
    INNER JOIN akc_dvd!speriod 
       ON akc.date_act = speriod.date_act_akc
 WHERE ALLTRIM(lic.pers_id) == "Ф" AND speriod.kod IN ({?speriodlist_})
 GROUP BY  1 ,  2 ,  3 
 ORDER BY  3 ,  4 
 EXTERNAL JOIN curNachAkcDvd.lic_id={?X:\DATA\AKCIONER\DATA\AKC_DVD.DBC: curVedAkcDvd.lic_id} AND curNachAkcDvd.kodsperiod={?X:\DATA\AKCIONER\DATA\AKC_DVD.DBC: curVedAkcDvd.kodsperiod}


X:\DATA\AKCIONER\DATA\AKC_DVD.DBC
SELECT
   Svedkass.lic_id,
   speriod.kod AS kodsperiod,
   Vedkass.date_act_akc,
   Vedkass.kodhddoc,
   SUM(Svedkass.summa) AS summa
 FROM akc_dvd!vedkass
    INNER JOIN akc_dvd!svedkass 
       ON Vedkass.kod = Svedkass.vedkass_id AND Svedkass.nepoluchil = .F.
    INNER JOIN akc_dvd!speriod 
       ON Vedkass.date_act_akc = speriod.date_act_akc
 WHERE vedkass.kodhddoc >  0 
 GROUP BY  1 ,  2 ,  3 ,  4 
 EXTERNAL JOIN curVedAkcDvd.lic_id={?X:\DATA\AKCIONER\DATA\AKC_DVD.DBC: curNachAkcDvd.lic_id} AND curVedAkcDvd.kodsperiod={?X:\DATA\AKCIONER\DATA\AKC_DVD.DBC: curNachAkcDvd.kodsperiod} AND curVedAkcDvd.kodhddoc={?PostgreSQL  8  Unicode: curVedPlat.kod}


PostgreSQL  8  Unicode
SELECT
   hddoc.kod,
   hddoc.snumber,
   (CASE WHEN TRIM(COALESCE(hddoc.snumber, '0')) <> '' THEN coalesce(to_number(hddoc.snumber,'999999999.99'), 0 ) ELSE '0' END)::numeric( 15 , 2 ) AS nnumber,
   hddoc.begdata,
   hdpldoc.kod AS kodhdpldoc,
   hdpldoc.summa::numeric( 20 , 2 ) AS summa,
   (CASE WHEN hddoc.kodtype =  64  THEN 'р/с' WHEN hddoc.kodtype =  109  THEN 'касса' ELSE '' END)::char( 5 ) AS sposobvipl,
   hdpldoc.debet,
   hdpldoc.kredit
   FROM hddoc
   INNER JOIN hdpldoc
      ON hddoc.kod = hdpldoc.kodhddoc
   WHERE hddoc.kodtype IN ( 64 , 109 )
         AND hddoc.begdata BETWEEN {?minendsperiod_} AND {?_enddate}
   ORDER BY hddoc.begdata, nnumber
 EXTERNAL JOIN curVedPlat.kod={?X:\DATA\AKCIONER\DATA\AKC_DVD.DBC: curVedAkcDvd.kodhddoc}
...
Рейтинг: 0 / 0
CR-XI. Уж больно непродуктивно запросы ходят.
    #35512476
kleine muk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может попробовать на основе запросов сделать вьюхи (или процедуры без параметров),
и уже к вьюхам коннектиться из Кристала
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Отчетные системы [игнор отключен] [закрыт для гостей] / CR-XI. Уж больно непродуктивно запросы ходят.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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