![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Oracle.Функция в выборке и в условии - 2 раза будет вычисляться? [D7]
OW © (2011-08-26 11:18:00)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 17:00:00) [1]спасибо
Игорь Шевченко (2011-08-26 15:49:00) [2]
> очень уж она накладная, не хотелось бы 2 раза
Во-первых, ее может вычислять один раз оптимизатор - он не дурак.
Во-вторых, ее можно засунуть во view
В-третьих, по возможности
ALTER SESSION SET EVENTS '10046 trace name context forever, level 12';
наше все
Кщд (2011-08-26 12:51:00) [3]>правда что-то еще дольше стало..
не сравнивайте планы
OW (2011-08-26 11:40:00) [4]правда что-то еще дольше стало..
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
OW (2011-08-26 11:29:00) [5]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
если так..