CftClub.ru
Клуб специалистов ЦФТ-Банк

обнуление структур

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
alexiy
Профи


Вступление в Клуб: 29.06.2007
СообщениеВт Ноя 18, 2008 12:03   обнуление структур Ответить с цитатой
Полезность: Нет оценки
мучает один глупый вопрос - а можно ли делать так:
Код:
...
dop_bud_reqs [BUD_REQ]; -- [BUD_REQ] - структура!
...
dop_bud_reqs := null;
...

что именно происходит при таком присвоении со структурой? (каков механизм присвоения, что происходит с памятью и т.п.)

в документации оракла однозначно сказано, что обнуление структуры возможно лишь методом присвоения пустой структуры того же типа...
_________________
two bee or not two bee
r00st
Эксперт


Вступление в Клуб: 14.09.2007
СообщениеВт Ноя 18, 2008 12:58   Re: обнуление структур Ответить с цитатой
Полезность: Нет оценки
Полагаю, такой пример развеит все сомнения.
Код:
dop_bud_reqs [BUD_REQ]; -- [BUD_REQ] - структура!
...
dop_bud_reqs.[OKATO_STR] := '12345';
dop_bud_reqs := null;
debig_pipe (dop_bud_reqs.[OKATO_STR],0);
.....

*Следует помнить, что структуры, имеющие реквизиты-массивы, стоит инитить перед заполнением.
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеВт Ноя 18, 2008 13:56    Ответить с цитатой
Полезность: Нет оценки
Пример мы писали... У нас обнулилось.
Но какие сомнения должны развеять примеры?
Если сам Оракл не пишет о возможности такого присвоения, то разве допустимо так писать?
r00st
Эксперт


Вступление в Клуб: 14.09.2007
СообщениеВт Ноя 18, 2008 14:27    Ответить с цитатой
Полезность: Нет оценки
timochev пишет:
Но какие сомнения должны развеять примеры?
вот эти:
Цитата:
мучает один глупый вопрос - а можно ли делать так:

timochev пишет:
Если сам Оракл не пишет о возможности такого присвоения, то разве допустимо так писать?
Может им подсказать стоит?
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеВт Ноя 18, 2008 15:06    Ответить с цитатой
Полезность: Нет оценки
Кто-нибудь знает, описана ли возможность присвоения NULL структуре в документации Oracle?

ИМХО Если такого описания нет, то ЦФТ и мы не должны так писать.. Даже если сейчас это работает. Во-первых, в новой версии Oracle может отключить такую фичу. Во-вторых, вдруг происходит утечка памяти (может обнуляется только ссылка на место в памяти, выделенное для этой структуры).
alexiy
Профи


Вступление в Клуб: 29.06.2007
СообщениеСр Ноя 19, 2008 10:49    Ответить с цитатой
Полезность: Нет оценки
неужто больше никто ничего не может сказать?...
гуру оракла, ёлки-иголки! где вы? Smile
для вас же это должно быть на уровне элементарщины, азбуки для детей...

может, я не в ту ветку написал?... Smile
_________________
two bee or not two bee
De Mian
Профи


Вступление в Клуб: 26.09.2008
СообщениеСб Янв 03, 2009 17:53    Ответить с цитатой
Полезность: Нет оценки
timochev пишет:
Кто-нибудь знает, описана ли возможность присвоения NULL структуре в документации Oracle?

ИМХО Если такого описания нет, то ЦФТ и мы не должны так писать.. Даже если сейчас это работает. Во-первых, в новой версии Oracle может отключить такую фичу. Во-вторых, вдруг происходит утечка памяти (может обнуляется только ссылка на место в памяти, выделенное для этой структуры).


Ну насколько понял всётаки пример выше написан на PL\PLUS....а не на PL\SQL... сейчас не работе( и слава богу- отдыхать тоже надо) . под рукой нет ни ибсы ни оракла..
Но текст на PL_PLUS типа
dop_bud_reqs [BUD_REQ]; -- [BUD_REQ] - структура!
...
dop_bud_reqs := null;
Парсится в PL_SQL в нечто подобное следующему:

dop_bud_reqs Z#BUD_REQ#ingterface.ИМЯ_ТИПА_БП;
plp$dop_bud_reqs Z#BUD_REQ#ingterface.ИМЯ_ТИПА_БП;
......
dop_bud_reqs := plp$dop_bud_reqs;

Вот вам и об-НУЛ-ение...

Ну вроде на нашем стареньком ядрышке так.
timochev
Эксперт


Вступление в Клуб: 02.07.2007
СообщениеСб Янв 10, 2009 10:09    Ответить с цитатой
Полезность: Нет оценки
De Mian пишет:

Но текст на PL_PLUS типа
dop_bud_reqs [BUD_REQ]; -- [BUD_REQ] - структура!
...
dop_bud_reqs := null;
Парсится в PL_SQL в нечто подобное следующему:

dop_bud_reqs Z#BUD_REQ#ingterface.ИМЯ_ТИПА_БП;
plp$dop_bud_reqs Z#BUD_REQ#ingterface.ИМЯ_ТИПА_БП;
......
dop_bud_reqs := plp$dop_bud_reqs;

Вот вам и об-НУЛ-ение...

Ну вроде на нашем стареньком ядрышке так.


У нас парсится в
Код:
DOP_BUD_REQS := null;

И проверяли мы не только на PL/Plus, но и на PL/SQL
alexiy
Профи


Вступление в Клуб: 29.06.2007
СообщениеВт Июн 09, 2009 16:55   обнуление PL/SQL таблиц! Ответить с цитатой
Полезность: Нет оценки
в продолжение заглохшего.
из библиотеки ЦФТ (будет реализовано в 9.3):
Код:
   type Rec_CalcDayPrc is record (OnDate   date
                           ,branch   ref [BRANCH]
                           ,CalcDate   date);
   
   type Tab_CalcDayPrc is table of Rec_CalcDayPrc index by varchar2;
   
   CalcDayPrc   Tab_CalcDayPrc;

...
Код:
   procedure clear_cache is
   begin
      CalcDayPrc := null;
   end;


а это как?... тоже все в порядке?
т.е. конструкция вида CalcDayPrc.delete не сильно обязательна?...
_________________
two bee or not two bee
r00st
Эксперт


Вступление в Клуб: 14.09.2007
СообщениеВт Июн 09, 2009 17:29    Ответить с цитатой
Полезность: Нет оценки
Это в порядке вещей.
Однако, на больших объемах может выскочить разница в скорости обработки. delete в этом случае предпочтительнее.
Доказательных ссылок не имею. Помню из практики.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru