|
|
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Вопрос в следующем : Есть некая хранимая процедура, в которой используется курсор. Запрос для этого курсора вне процедуры выполняется меньше 0.01 сек. Этот же запрос в процедуре при открытии курсора выполняется 30 сек. Как можно ускорить выполнение запроса в процедуре? Что его может тормозить в процедуре? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 10:20 |
|
||
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
A gde sama procedure? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 10:37 |
|
||
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
2 Oracle X-pert В пакете. Или нужен текст? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 10:50 |
|
||
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
Кстати у меня такое же наблюдается в ряде процедур очень серьезный вопрос, подскажите что делать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 10:58 |
|
||
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
Mne nugen text. Kak ya ponimay, security moget byt' spocoina - text procedure without objects nichego ne isportit.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 11:17 |
|
||
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
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)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 11:25 |
|
||
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
Net, ty ne ponyal.. mne nugen text procedure.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 11:27 |
|
||
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
Полный текст процедуры очень большой. Ниже приведенный текст работает так же. Тормозит именно на открытии курсора. -------------------------------------------- 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; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 11:44 |
|
||
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
А сколько записей возвращает этот запрос ? И если в этот запрос, выполняемый вне процедуры за 0.01 сек, добавить order by по любому столбцу не будет ли он выполняться за те же 30 сек ? Это я к тому, что вне процедуры ты быстро получаешь первые записи, а процедура пашет пока все не выберет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 11:50 |
|
||
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
in_card_acct in_card_kind in_curr - функции ? а в процедуре на их месте - bind переменные , ну так и планы запросов могут быть разные ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 11:53 |
|
||
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
2 va_kochnev В данном случае запрос возвращает 1 запись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 11:56 |
|
||
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
2 ora600 in_card_acct in_card_kind in_curr - НЕ функции. Это переменные, параметры процедуры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 12:04 |
|
||
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
Your select use multi-parsing per recordset:: {get_real_value(..)...} on conditions: (+). ++++++++ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 12:10 |
|
||
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
Reshenie " v lob" :: use statement Execute immediate or DBMS_SQL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 12:22 |
|
||
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
2 Oracle X-pert А почему вне процедуры запрос выполняется быстро? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 12:34 |
|
||
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 12:47 |
|
||
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
Спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 12:58 |
|
||
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
Welcome! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 12:59 |
|
||
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
>in_card_acct in_card_kind in_curr - НЕ функции. Это переменные, параметры процедуры а я про ПЕРВЫЙ СЕЛЕКТ спрашиваю, а не про процедуру. Там есть эта ботва. Что будет с этим селектом в sqlplus -е, если это не функции ? Константы подразумеваются ? 2Xpert >Pri zapuske v regime plsql - mnogokratno, v poryadke scaning RecordSet... С какого это перепугу ? Где у него в процедуре динамический sql ? Почему У ВСЕХ ВСЕ ЕЩЕ ОРАКЛ РАБОТАЕТ ЕСЛИ ОН ПАРСИТ СКЛ НА КАЖДОМ ФЕТЧЕ ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 13:19 |
|
||
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
2 ora600 Please, read this topic! { zakusyvat' nado:: DBMS SQL net, ego nado sdelat'!} ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 13:28 |
|
||
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
Может быть, нужно так ... 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 пендюрить куда попало ? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 13:53 |
|
||
|
Вопрос по процедуре в PL/SQL
|
|||
|---|---|---|---|
|
#18+
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.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.03.2003, 14:14 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=32119113&tid=1991510]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
133ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 399ms |

| 0 / 0 |
