powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / сброс переменной пакета
17 сообщений из 17, страница 1 из 1
сброс переменной пакета
    #39353639
wolfio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

Есть вот такой пакет (это схематичный пример, просто для понимания):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
package body TEST_DEP is
    test_var    number := SYSTEM.this_variable;
    
    procedure TEST_put is
    begin
        dbms_put.put_line(test_var);
    end;
end TEST_DEP;            



к этому пакету я обращаюсь из другого, подменяя SYSTEM.this_variable каждый раз, перед вызовом TEST_put, из этого пакета:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
begin
    for x in 1..2 loop

        if x = 1 then 
            SYSTEM.this_variable := 1; 
            TEST_DEP_TEST_put();
        elsif x = 2 then
            SYSTEM.this_variable := 2; 
            TEST_DEP_TEST_put();
        end if;
        
    end loop;
end;



однако, значение test_var для обеих итераций цикла будет равным первому, т.е., оно закешировалось.

Вопрос в том, как сбросить/переинициализировать значение переменной пакета?
Вариант переопределения/расширения пакета пока не рассматриваю
...
Рейтинг: 0 / 0
сброс переменной пакета
    #39353643
Фотография mRdUKE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
сброс переменной пакета
    #39353645
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolfioВопрос в том, как сбросить/переинициализировать значение переменной пакета?
Вариант переопределения/расширения пакета пока не рассматриваю

DBMS_SESSION.RESET_PACKAGE в Вашем случае - Самое Оно...
Еще можно спецификацию перекомпилировать перед вызовом или объект, от которого данный спек зависит...
Ах да! Главный Cпособ:
Код: plsql
1.
2.
3.
4.
SQL> shutdown immediate
...
SQL> startup
SQL> ...теперь можно вызывать пакет
...
Рейтинг: 0 / 0
сброс переменной пакета
    #39353658
wolfio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mRdUKE,
как это мне поможет?

andrey_anonymous,
вот прям обожаю sql.ru за таких как вы
а по делу есть что?
...
Рейтинг: 0 / 0
сброс переменной пакета
    #39353667
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По делу есть смысл почитать доку , прежде чем использовать незнакомый инструмент
Хотя можно и методом тыка, конечно, и обязательно прилюдно
Но тогда и не стоит обижаться на стеб
...
Рейтинг: 0 / 0
сброс переменной пакета
    #39353670
wolfio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вячеслав Любомудров,
да буков шибко много, так бы конешно прочел бы

я то не за теорией зашел, а за вразумительным ответом о том, почему так сделать нельзя, или как это сделать можно.
доку я в принципе читал, и почти уверен, что обновить значение не получится, но вдруг появились новые фишки, и какой-нибудь асс мимо этой темы проходя, решил бы помочь?
...
Рейтинг: 0 / 0
сброс переменной пакета
    #39353675
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolfioкак это сделать можно
Код: plsql
1.
TEST_DEP.INIT(…);
...
Рейтинг: 0 / 0
сброс переменной пакета
    #39353730
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
глобальные переменные - зло
...
Рейтинг: 0 / 0
сброс переменной пакета
    #39353750
wolfio
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andreymx,

не могу с вами не согласиться
...
Рейтинг: 0 / 0
сброс переменной пакета
    #39353866
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolfioоднако, значение test_var для обеих итераций цикла будет равным первому, т.е., оно закешировалось.



я не называю ето кешированием, скорее инициализация при первом вызове пакета
имхо
никак (сбросить одну), кроме как менять TEST_put

если переменная не описана в спецификаци доступ к ней из вне невозможен


.....
stax
...
Рейтинг: 0 / 0
сброс переменной пакета
    #39353939
Амаразм
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
alter system flush shared_pool;
...
Рейтинг: 0 / 0
сброс переменной пакета
    #39353988
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolfioВопрос в том, как сбросить/переинициализировать значение переменной пакета?


То что ты хочешь называется контекстной переменной. Кури CREATE CONTEXT .

SY.
...
Рейтинг: 0 / 0
сброс переменной пакета
    #39353999
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYwolfioВопрос в том, как сбросить/переинициализировать значение переменной пакета?


То что ты хочешь называется контекстной переменной. Кури CREATE CONTEXT .

SY.
авторВариант переопределения/расширения пакета пока не рассматриваю


.....
stax
...
Рейтинг: 0 / 0
сброс переменной пакета
    #39354005
Фотография Egoр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wolfioя то не за теорией зашел, а за вразумительным ответом о том, почему так сделать нельзя, или как это сделать можно.
Проходил мимо темы, хотел бы помочь, да не могу понять, что вы сделать хотите.
То ли внутреннюю переменную в теле пакета использовать, то ли глобальную.
Может какие-нибудь подробности у вас есть?
...
Рейтинг: 0 / 0
сброс переменной пакета
    #39354013
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, ТС не говорил, что пакет его
Может, ему в наследство впендюрили, а править нельзя, ибо покупное
...
Рейтинг: 0 / 0
сброс переменной пакета
    #39354096
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..авторВариант переопределения/расширения пакета пока не рассматриваю


.....
stax

Ну тогда в лоб:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
begin
    for x in 1..2 loop

        if x = 1 then 
            SYSTEM.this_variable := 1; 
           TEST_DEP.test_var := SYSTEM.this_variable;
            TEST_DEP_TEST_put();
        elsif x = 2 then
            SYSTEM.this_variable := 2; 
           TEST_DEP.test_var := SYSTEM.this_variable;
            TEST_DEP_TEST_put();
        end if;
        
    end loop;
end;



SY.
...
Рейтинг: 0 / 0
сброс переменной пакета
    #39354113
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYНу тогда в лоб:

Код: plsql
1.
           TEST_DEP.test_var := SYSTEM.this_variable;




А надо было не в лоб, а в package body Ж)
С учетом

wolfioВариант переопределения/расширения пакета пока не рассматриваю
сложно предложить что-то помимо 19929828 и 19931007 .
Разве что через ORADEBUG кто-нибудь что-нибудь предложит... дальше только прямая запись в память процесса - для особо тонких извращенцев :)
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / сброс переменной пакета
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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