Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.08.20;
Скачать: CL | DM;

Вниз

Oracle.Функция в выборке и в условии - 2 раза будет вычисляться?   Найти похожие ветки 

 
OW ©   (2011-08-26 11:18) [0]

select
-- T.DATE_BEGIN, T.DATE_END, T.OPERATION_DATE, T.STATUS
 T.*,
 S.DEV_ID, S.DATE_BEGIN, S.DATE_END, S.INSERT_DATE,
 U.ACCOUNT, U.NAME,
  dvbt_deptors.get_debet_saldo("main", s.user_id) SALDO
from
 TABLE(CAST(DVBT_DEPTORS.GET_ON_STATUS("main", "2", "both",
                                            to_char(SYSDATE - 2, "dd.mm.yyyy"),
                                            to_char(SYSDATE + 1, "dd.mm.yyyy")
                                      ) AS DVBT_GETONSTATUS_TABLE
           )
       ) T
       join MAIN.T_SERVICES S on S.SERV_FIRST_ID = T.SERV_FIRST_ID
       join MAIN.T_SVC_REF SR on SR.SVC_ID = S.SVC_ID
       join MAIN.T_USERS U on U.USER_ID = S.USER_ID
where
 SR.COD = "5500"
 AND SR.ISCONST = "Y"
and dvbt_deptors.get_debet_saldo("main", s.user_id) < 0
order by
T.OPERATION_DATE desc

очень уж она накладная, не хотелось бы 2 раза


 
OW ©   (2011-08-26 11:29) [1]

select * from (
select
-- T.DATE_BEGIN, T.DATE_END, T.OPERATION_DATE, T.STATUS
T.*,
S.DEV_ID, S.DATE_BEGIN, S.DATE_END, S.INSERT_DATE,
U.ACCOUNT, U.NAME,
 dvbt_deptors.get_debet_saldo("main", s.user_id) SALDO
from
TABLE(CAST(DVBT_DEPTORS.GET_ON_STATUS("main", "2", "both",
                                           to_char(SYSDATE - 2, "dd.mm.yyyy"),
                                           to_char(SYSDATE + 1, "dd.mm.yyyy")
                                     ) AS DVBT_GETONSTATUS_TABLE
          )
      ) T
      join MAIN.T_SERVICES S on S.SERV_FIRST_ID = T.SERV_FIRST_ID
      join MAIN.T_SVC_REF SR on SR.SVC_ID = S.SVC_ID
      join MAIN.T_USERS U on U.USER_ID = S.USER_ID
where
SR.COD = "5500"
AND SR.ISCONST = "Y"
)
where SALDO < 0

если так..


 
OW ©   (2011-08-26 11:40) [2]

правда что-то еще дольше стало..

select
*
from (
 select
   T.DATE_BEGIN TDATE_BEGIN, T.DATE_END TDATE_END, T.OPERATION_DATE, T.STATUS,
   S.DEV_ID, S.DATE_BEGIN, S.DATE_END, S.INSERT_DATE,
   U.ACCOUNT, U.NAME,
   dvbt_deptors.get_debet_saldo("main", s.user_id) SALDO
 from
   TABLE(CAST(DVBT_DEPTORS.GET_ON_STATUS("main", "2", "both",
                                              to_char(SYSDATE - 2, "dd.mm.yyyy"),
                                              to_char(SYSDATE + 1, "dd.mm.yyyy")
                                        ) AS DVBT_GETONSTATUS_TABLE
             )
         ) T
         join MAIN.T_SERVICES S on S.SERV_FIRST_ID = T.SERV_FIRST_ID
         join MAIN.T_SVC_REF SR on SR.SVC_ID = S.SVC_ID
         join MAIN.T_USERS U on U.USER_ID = S.USER_ID
 where
   SR.COD = "5500"
   and SR.ISCONST = "Y"
) A  
where
 A.SALDO < 0  
order by
 A.OPERATION_DATE desc


 
Кщд   (2011-08-26 12:51) [3]

>правда что-то еще дольше стало..
не сравнивайте планы


 
Игорь Шевченко ©   (2011-08-26 15:49) [4]


> очень уж она накладная, не хотелось бы 2 раза


Во-первых, ее может вычислять один раз оптимизатор - он не дурак.
Во-вторых, ее можно засунуть во view
В-третьих, по возможности
ALTER SESSION SET EVENTS "10046 trace name context forever, level 12";
наше все


 
OW ©   (2011-08-26 17:00) [5]

спасибо



Страницы: 1 вся ветка

Текущий архив: 2017.08.20;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.005 c
2-1427465606
Дмитрий
2015-03-27 17:13
2017.08.20
"Вложенные" вычисления в запросе


3-1314343082
OW
2011-08-26 11:18
2017.08.20
Oracle.Функция в выборке и в условии - 2 раза будет вычисляться?


15-1464371531
K-1000
2016-05-27 20:52
2017.08.20
Ваш опен-сорс


1-1352816586
cobalt
2012-11-13 18:23
2017.08.20
D7, XPManifest, TMemo и TPanel.Color


2-1427187807
TComboBox
2015-03-24 12:03
2017.08.20
ComboBox DroppedDown direction