powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle having first
2 сообщений из 27, страница 2 из 2
Oracle having first
    #39364139
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>SY, сегодня, 16:11 [19988042]

>Втыкаем "бабушкин метод": ...
В моих условиях нет суррогатного ключа ROWID, а obv.numopzn не уникален.
При переносе SELECT из WHERE ... IN( во FROM

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
  SELECT
      obv.numopzn
    ,obv.dateizm
    ...
  FROM
   ...
   ,(
      SELECT 
         obv.numopzn  numopzn 
        ,MAX(obv.dateizm)  dateizm 
      FROM
        ...
      WHERE
        ...
      GROUP BY obv.numopzn
  )  t1
 WHERE
   ...
    obv.numopzn=t1. numopzn
   AND obv.dateizm =t1.dateizm  
 ORDER BY obv.numopzn;



данная конструкция работоспособна.
Примерное время построения выборки - 18 секунд (тестовые условия)
Примерное время построения выборки с временной таблицей при тех же условиях - 6 секунд.
Примерное время построения выборки с аналитической функцией при тех же условиях - 12 секунд.

С уважением,
Владимир
...
Рейтинг: 0 / 0
Oracle having first
    #39364593
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>stax.., 10 дек 16, 14:13 [19987828]
>... фетчим первые и exit.

Так как в Oracle дилетант, а учиться надо, попробовал найти решение и в этой схеме.
Вот результат.
Скорострельность примерно равна 6 сек.

-- Цикл по курсору
Код: plsql
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.
 procedure get_PrebivanieTB(
   cur_viborka out t_cursor
   ,xdate in date
 )
 is
  CURSOR cr IS
   SELECT * 
   FROM (
    SELECT 
      TRIM(obv.numopzn) numopzn
     ,slv.namvrr namvrr  
     ,jdk.numdoc numdoc
     ,obj.ABBROBJR  mesto
     ,SUBSTR(loc.coord, 1, 7) lat
     ,SUBSTR(loc.coord, 8, 8) lng
     ,obv.dateizm dateizm
    FROM
      objvr obv
     ,objs obj
     ,objlocation obl
     ,location loc
     ,slvr slv
     ,cg_ref_codes cd
     ,tipvr tv
     ,sltipvr slt
     ,(
       SELECT codprvr, namesostvr 
       FROM prvr 
       WHERE prvr.CODDOG = '___'
     ) pv
     ,(
       SELECT ov2.NUMOPZN, ov2.codobjvr 
       FROM   OBJVR ov2 
       WHERE ov2.numopzn is not null
     ) svyaz
     ,(
       SELECT jdc.coddoc, jdc.numdoc, sfu.nformuved, jdc.datetimeregdoc 
       FROM journaldoc jdc, slformuv sfu 
       WHERE jdc.coddog = '___' AND jdc.codformuv = sfu.codformuv (+)
     ) jdk
    WHERE 
      obv.DEL IS NULL
     AND obv.coddoc = jdk.coddoc (+)
      . . . 
     AND TRUNC(obv.dateizm) <= xdate
    ORDER BY
      obv.numopzn
     ,obv.dateizm
  );
  
  xstr varchar2(30);

 BEGIN
  DELETE FROM  tbl_tmp_gis;
  COMMIT;

  xstr := ' ';

  FOR row IN cr LOOP
   IF row.numopzn <> xstr THEN
    INSERT INTO tbl_tmp_gis VALUES (
      row.numopzn
     ,row.namvrr
     ,row.numdoc
     ,row.mesto
     ,row.lat
     ,row.lng
     ,row.dateizm 
    );
    xstr := row.numopzn;
   END IF; 
  END LOOP;
  open cur_viborka for 
  SELECT tbl_tmp_gis.*
  FROM  tbl_tmp_gis;
 
  DELETE FROM  tbl_tmp_gis;
  COMMIT;
 end get_PrebivanieTB; 


где:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 CREATE GLOBAL TEMPORARY TABLE tbl_tmp_gis(
     numopzn VARCHAR2(30)
    ,namvrr VARCHAR2(55)
    ,numdoc VARCHAR2(20)
    ,mesto VARCHAR2(255)
    ,lat VARCHAR2(7)
    ,lng VARCHAR2(8)
    ,dateizm DATE 
   )
   ON COMMIT PRESERVE ROWS;


С уважением,
Владимир
...
Рейтинг: 0 / 0
2 сообщений из 27, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Oracle having first
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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