Форум: "Базы";
Текущий архив: 2017.08.20;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.001 c