Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / сброс переменной пакета / 17 сообщений из 17, страница 1 из 1
24.11.2016, 13:56
    #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
24.11.2016, 14:01
    #39353643
mRdUKE
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сброс переменной пакета
...
Рейтинг: 0 / 0
24.11.2016, 14:03
    #39353645
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сброс переменной пакета
wolfioВопрос в том, как сбросить/переинициализировать значение переменной пакета?
Вариант переопределения/расширения пакета пока не рассматриваю

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

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

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

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



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

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


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


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

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


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

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


.....
stax
...
Рейтинг: 0 / 0
24.11.2016, 18:19
    #39354005
Egoр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сброс переменной пакета
wolfioя то не за теорией зашел, а за вразумительным ответом о том, почему так сделать нельзя, или как это сделать можно.
Проходил мимо темы, хотел бы помочь, да не могу понять, что вы сделать хотите.
То ли внутреннюю переменную в теле пакета использовать, то ли глобальную.
Может какие-нибудь подробности у вас есть?
...
Рейтинг: 0 / 0
24.11.2016, 18:28
    #39354013
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сброс переменной пакета
кстати, ТС не говорил, что пакет его
Может, ему в наследство впендюрили, а править нельзя, ибо покупное
...
Рейтинг: 0 / 0
24.11.2016, 21:12
    #39354096
SY
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
24.11.2016, 21:38
    #39354113
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
сброс переменной пакета
SYНу тогда в лоб:

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




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

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


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