powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по процедуре в PL/SQL
22 сообщений из 22, страница 1 из 1
Вопрос по процедуре в PL/SQL
    #32118955
Lukas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Вопрос в следующем :
Есть некая хранимая процедура, в которой используется курсор. Запрос для этого курсора вне процедуры выполняется меньше 0.01 сек. Этот же запрос в процедуре при открытии курсора выполняется 30 сек.
Как можно ускорить выполнение запроса в процедуре?
Что его может тормозить в процедуре?

Спасибо.
...
Рейтинг: 0 / 0
Вопрос по процедуре в PL/SQL
    #32118977
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
A gde sama procedure?
...
Рейтинг: 0 / 0
Вопрос по процедуре в PL/SQL
    #32118994
Lukas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Oracle X-pert

В пакете.
Или нужен текст?
...
Рейтинг: 0 / 0
Вопрос по процедуре в PL/SQL
    #32119007
Сергей $
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати у меня такое же наблюдается в ряде процедур
очень серьезный вопрос, подскажите что делать
...
Рейтинг: 0 / 0
Вопрос по процедуре в PL/SQL
    #32119044
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mne nugen text. Kak ya ponimay, security moget byt' spocoina - text procedure without objects nichego ne isportit..
...
Рейтинг: 0 / 0
Вопрос по процедуре в PL/SQL
    #32119058
Lukas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
select c.clnt_cat, cnd.is_real_card, a.condit_new, cnd.use_in_real_calc, cnd.olim_intr, cnd.deb_intr nr_deb_intr,
a.card_acct, a.curr, a.card_kind,
a.prev_month_percent_rest percent_amount, a.crd, a.int_free,
get_real_value(cnd.use_in_real_calc, cn.grace_period, cnd.grace_period) grace_period,
get_real_value(cnd.use_in_real_calc, cn.grace_part_min_percent, cnd.grace_part_min_percent) grace_part_min_percent,
get_real_value(cnd.use_in_real_calc, cn.grace_part_min_amount, cnd.grace_part_min_amount) grace_part_min_amount,
get_real_value(cnd.use_in_real_calc, cn.deb_intr, cnd.real_deb_intr) deb_intr, cnd.cred_intr cred_intr,
get_real_value(cnd.use_in_real_calc, cn.late_intr, cnd.real_late_intr) late_intr,
get_real_value(cnd.use_in_real_calc, cn.penalty_percent, cnd.real_penalty_percent) penalty_percent
from accnt a, condit_new cn, client c, condit cnd
where a.condit_new = cn.condit_new(+)
and a.card_kind = cn.card_kind(+)
and ((in_card_acct is not null) or a.status in (0, 1, 2))
and cnd.cond_set = a.cond_set
and cnd.card_kind = a.card_kind
and a.card_kind = c.card_kind
and a.client = c.client
and (c.card_kind, c.clnt_cat) not in (('08', 3))
and ((in_card_acct is null)
or (a.card_acct = in_card_acct and
a.card_kind = in_card_kind and
a.curr = in_curr))
...
Рейтинг: 0 / 0
Вопрос по процедуре в PL/SQL
    #32119060
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Net, ty ne ponyal..
mne nugen text procedure..
...
Рейтинг: 0 / 0
Вопрос по процедуре в PL/SQL
    #32119090
Lukas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Полный текст процедуры очень большой. Ниже приведенный текст работает так же. Тормозит именно на открытии курсора.

--------------------------------------------

procedure test(
in_1 varchar2 := null,
in_2 pls_integer := null,
in_3 pls_integer := null) is

cursor c_cursor is
select c.clnt_cat, cnd.is_real_card, a.condit_new, cnd.use_in_real_calc, cnd.olim_intr, cnd.deb_intr nr_deb_intr,
a.card_acct, a.curr, a.card_kind,
a.prev_month_percent_rest percent_amount, a.crd, a.int_free,
get_real_value(cnd.use_in_real_calc, cn.grace_period, cnd.grace_period) grace_period,
get_real_value(cnd.use_in_real_calc, cn.grace_part_min_percent, cnd.grace_part_min_percent) grace_part_min_percent,
get_real_value(cnd.use_in_real_calc, cn.grace_part_min_amount, cnd.grace_part_min_amount) grace_part_min_amount,
get_real_value(cnd.use_in_real_calc, cn.deb_intr, cnd.real_deb_intr) deb_intr, cnd.cred_intr cred_intr,
get_real_value(cnd.use_in_real_calc, cn.late_intr, cnd.real_late_intr) late_intr,
get_real_value(cnd.use_in_real_calc, cn.penalty_percent, cnd.real_penalty_percent) penalty_percent
from accnt a, condit_new cn, client c, condit cnd
where a.condit_new = cn.condit_new(+)
and a.card_kind = cn.card_kind(+)
and ((in_1 is not null) or a.status in (0, 1, 2))
and cnd.cond_set = a.cond_set
and cnd.card_kind = a.card_kind
and a.card_kind = c.card_kind
and a.client = c.client
and (c.card_kind, c.clnt_cat) not in (('08', 3))
and ( (in_card_acct is null)
or (a.card_acct = in_1 and
a.card_kind = in_2 and
a.curr = in_3));
begin
for i in c_cursor loop
null;
end loop;
end test;
...
Рейтинг: 0 / 0
Вопрос по процедуре в PL/SQL
    #32119103
va_kochnev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А сколько записей возвращает этот запрос ?
И если в этот запрос, выполняемый вне процедуры за 0.01 сек, добавить order by по любому столбцу не будет ли он выполняться за те же 30 сек ?

Это я к тому, что вне процедуры ты быстро получаешь первые записи, а процедура пашет пока все не выберет.
...
Рейтинг: 0 / 0
Вопрос по процедуре в PL/SQL
    #32119105
ora600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
in_card_acct in_card_kind in_curr - функции ?
а в процедуре на их месте - bind переменные ,
ну так и планы запросов могут быть разные
...
Рейтинг: 0 / 0
Вопрос по процедуре в PL/SQL
    #32119113
Lukas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 va_kochnev
В данном случае запрос возвращает 1 запись.
...
Рейтинг: 0 / 0
Вопрос по процедуре в PL/SQL
    #32119134
Lukas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 ora600

in_card_acct in_card_kind in_curr - НЕ функции. Это переменные, параметры процедуры.
...
Рейтинг: 0 / 0
Вопрос по процедуре в PL/SQL
    #32119143
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Your select use multi-parsing per recordset::
{get_real_value(..)...}
on conditions: (+).
++++++++
...
Рейтинг: 0 / 0
Вопрос по процедуре в PL/SQL
    #32119169
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Reshenie " v lob" :: use statement Execute immediate or DBMS_SQL.
...
Рейтинг: 0 / 0
Вопрос по процедуре в PL/SQL
    #32119187
Lukas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Oracle X-pert
А почему вне процедуры запрос выполняется быстро?
...
Рейтинг: 0 / 0
Вопрос по процедуре в PL/SQL
    #32119213
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pri zapuske kak obychnui select
parsing delaetsya 1 raz.
Pri zapuske v regime plsql - mnogokratno, v poryadke scaning RecordSet...

Esli ty ego zapustish cherez DBMS_SQL/Execute Immediate, to
PLSQL -> interrupt-> SQL -> run -> ret result ->PLSQL , t.e. toge bydet vypolnen
1 raz.
Eto reshenie ne optimal'no, predupregday..
No dlya Polee "normalnogo" resheniya mne nugen POLNYI (!) text procedure
i vseh ee non-system references.
...
Рейтинг: 0 / 0
Вопрос по процедуре в PL/SQL
    #32119228
Lukas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
...
Рейтинг: 0 / 0
Вопрос по процедуре в PL/SQL
    #32119234
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Welcome!
...
Рейтинг: 0 / 0
Вопрос по процедуре в PL/SQL
    #32119272
ora600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>in_card_acct in_card_kind in_curr - НЕ функции. Это переменные, параметры процедуры

а я про ПЕРВЫЙ СЕЛЕКТ спрашиваю, а не про процедуру. Там есть эта ботва. Что будет с этим селектом в sqlplus -е, если это не функции ? Константы подразумеваются ?

2Xpert
>Pri zapuske v regime plsql - mnogokratno, v poryadke scaning RecordSet...
С какого это перепугу ? Где у него в процедуре динамический sql ? Почему У ВСЕХ ВСЕ ЕЩЕ ОРАКЛ РАБОТАЕТ ЕСЛИ ОН ПАРСИТ СКЛ НА КАЖДОМ ФЕТЧЕ ?
...
Рейтинг: 0 / 0
Вопрос по процедуре в PL/SQL
    #32119292
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ora600 Please, read this topic!
{ zakusyvat' nado:: DBMS SQL net, ego nado sdelat'!}
...
Рейтинг: 0 / 0
Вопрос по процедуре в PL/SQL
    #32119325
ora600
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может быть, нужно так
...
p1 varchar2
p2 int
p3 int
...


cursor c_cursor(in_1 varchar2, in_2 int, in_3 int) is
select c.clnt_cat, cnd.is_real_card, a.condit_new, cnd.use_in_real_calc, cnd.olim_intr, cnd.deb_intr nr_deb_intr,
a.card_acct, a.curr, a.card_kind,
a.prev_month_percent_rest percent_amount, a.crd, a.int_free,
get_real_value(cnd.use_in_real_calc, cn.grace_period, cnd.grace_period) grace_period,
get_real_value(cnd.use_in_real_calc, cn.grace_part_min_percent, cnd.grace_part_min_percent) grace_part_min_percent,
get_real_value(cnd.use_in_real_calc, cn.grace_part_min_amount, cnd.grace_part_min_amount) grace_part_min_amount,
get_real_value(cnd.use_in_real_calc, cn.deb_intr, cnd.real_deb_intr) deb_intr, cnd.cred_intr cred_intr,
get_real_value(cnd.use_in_real_calc, cn.late_intr, cnd.real_late_intr) late_intr,
get_real_value(cnd.use_in_real_calc, cn.penalty_percent, cnd.real_penalty_percent) penalty_percent
from accnt a, condit_new cn, client c, condit cnd
where a.condit_new = cn.condit_new(+)
and a.card_kind = cn.card_kind(+)
and ((in_1 is not null) or a.status in (0, 1, 2))
and cnd.cond_set = a.cond_set
and cnd.card_kind = a.card_kind
and a.card_kind = c.card_kind
and a.client = c.client
and (c.card_kind, c.clnt_cat) not in (('08', 3))
and ( (in_card_acct is null)
or (a.card_acct = in_1 and
a.card_kind = in_2 and
a.curr = in_3));
begin
for i in c_cursor(p1,p2,p3) loop
null;
end loop;

2XPert
Что за травку куришь, что советуешь DBMS_SQL пендюрить куда попало ? :-)
...
Рейтинг: 0 / 0
Вопрос по процедуре в PL/SQL
    #32119353
Фотография Oracle X-pert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nasha sila - v nashih plavkah!
Travkoi ne balyemsya, hotya zdes' eto osoblivo ne osugdaetsya..
( gorazdo strashnee obychnyi tabak..)
A v ostal'nom -
napisano: {Eto reshenie ne optimal'no, predupregday.. }.
Tvoi variant , kak eto vosprinimaet compiler,nichem (!) ne otlichaetsya ot originala.
( compiler - moi..).
Na moi vzglad - luche perepisat' procedure's select, chem vyzyvat' v odin RecordSet "get_real_value" 6(!) raz..
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по процедуре в PL/SQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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