Запуск JOBа от имени другого пользователя
На страницу Пред. 1, 2, 3, 4 След.
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
zh Участник со стажем
Вступление в Клуб: 10.12.2009
|
Чт Июл 29, 2010 17:31   |
|
Полезность: Нет оценки
|
2mb пишет: | zh пишет: | 2mb пишет: | APP_SECURITY.SetUserId работает ТОЛЬКО из-под JOB или EOD |
Засунул в операцию, которая, собственно, выполняется по расписанию, т.е. крутится под JOB'ом...
не помогло.
Пользователь был успешно поменян без ошибок.
ORA-0000: normal, successful completion
Однако проводки все равно легли под пользователем, поставившим задание. |
А переинициализацию контекстов пользователя и системных переменных Вы не забыли выполнить? |
Эмм..
Ну, если только
::[TRC].[INI].trc_set_var_current;
что я упустил? _________________ Всего должно быть в меру. |
|
 |
2mb Участник
Вступление в Клуб: 23.04.2008
|
Пт Июл 30, 2010 09:45   |
|
Полезность: Нет оценки
|
zh пишет: | 2mb пишет: | zh пишет: | 2mb пишет: | APP_SECURITY.SetUserId работает ТОЛЬКО из-под JOB или EOD |
Засунул в операцию, которая, собственно, выполняется по расписанию, т.е. крутится под JOB'ом...
не помогло.
Пользователь был успешно поменян без ошибок.
ORA-0000: normal, successful completion
Однако проводки все равно легли под пользователем, поставившим задание. |
А переинициализацию контекстов пользователя и системных переменных Вы не забыли выполнить? |
Эмм..
Ну, если только
::[TRC].[INI].trc_set_var_current;
что я упустил? |
::[SYSTEM].[VARIABLES].reinit; |
|
 |
zh Участник со стажем
Вступление в Клуб: 10.12.2009
|
Пт Июл 30, 2010 17:28   |
|
Полезность: Нет оценки
|
2mb пишет: | ::[SYSTEM].[VARIABLES].reinit; |
не особо помогло...  _________________ Всего должно быть в меру. |
|
 |
2mb Участник
Вступление в Клуб: 23.04.2008
|
Ср Авг 04, 2010 14:18   |
|
Полезность: Нет оценки
|
zh пишет: | 2mb пишет: | ::[SYSTEM].[VARIABLES].reinit; |
не особо помогло...  |
Посмотрите операцию ::[END_OD_OPERATION].[END_OD]
секция LOCAL после слов
-- подменяем пользьзвателя из настройки в любом случае, независимо от того, мультифилиальное завершение или нет. |
|
 |
wolfio Участник - экстремал
Вступление в Клуб: 22.10.2012
|
Чт Ноя 24, 2016 11:40   |
|
Полезность: Нет оценки
|
Здравствуйте.
Т.к. тема не закрыта, решил не плодить.
У меня проблема с подменой системных переменных.
Имею вот такую операцию (это упрощенный пример дистрибутива):
Локальные описания
Код: |
OurDepart ref [DEPART] := ::[SYSTEM].[VARIABLES].OurDepart; |
Тело
Код: | begin
stdio.put_line_pipe(' inner OURDEPART='||OurDepart,'mdv');
end;
|
Написал к операции выше операцию обертку, которая взависимости от филиала подменит пользователя. Тоже упростил для примера:
Код: |
vDate date := trunc(sysdate);
vRef ref [document];
vRefUser4CrSF ref [user];
vRefCenralDepart ref [depart];
begin
--цикл по 2м филиалам
for fil in ::[branch]
where nvl(fil.[DATE_END],vDate+1) > vDate
loop
stdio.put_line_pipe('------------------------------------------------'||fil.[cod],'mdv');
if fil.[cod] = '101' then --исправил реквизит, чтобы форум принял форматирование
vRefUser4CrSF := 612965698; -- TRC101
elsif fil.[cod] = '001' then
vRefUser4CrSF := 8935362; --TRC (001 fil)
end if;
locate vRefCenralDepart in ::[depart]
where vRefCenralDepart.[high] is null
and vRefCenralDepart.[filial] = fil;
[stdlib].user_ID := vRefUser4CrSF; --подмена пользователя
[SYSTEM].[VARIABLES].init_it(true,false); --реинит
::[SYSTEM].[VARIABLES].set_system_vars_by_depart(vRefCenralDepart,true); --подмена департа
stdio.put_line_pipe('34: '||vRefCenralDepart||' '||::[SYSTEM].[VARIABLES].OurDepart,'mdv');
[TEST_DEP]();
stdio.put_line_pipe('38: '||::[SYSTEM].[VARIABLES].OurDepart,'mdv');
end loop;
end;
|
в результат получаю такую отладку:
Цитата: | 11:37:54 ------------------------------------------------001
34: 8935433 8935433
inner OURDEPART=8935433
38: 8935433
------------------------------------------------101
34: 291194961 291194961
inner OURDEPART=8935433
38: 291194961
|
Вопрос в том, почему для в обоих случаев, для каждого филиала значение inner OURDEPART одинаковое? |
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
Чт Ноя 24, 2016 11:46   |
|
Полезность: Нет оценки
|
wolfio пишет: |
...
У меня проблема с подменой системных переменных.
...
в результат получаю такую отладку:
Цитата: | 11:37:54 ------------------------------------------------001
34: 8935433 8935433
inner OURDEPART=8935433
38: 8935433
------------------------------------------------101
34: 291194961 291194961
inner OURDEPART=8935433
38: 291194961
|
|
Приветствую, судя по логу у тебя всё меняется корректно...
В чем проблема то?
Код: | 34: 8935433 8935433
inner OURDEPART=8935433
38: 8935433 |
Код: | 34: 291194961 291194961
inner OURDEPART=8935433
38: 291194961 |
Код: | stdio.put_line_pipe('34: '||vRefCenralDepart||' '||::[SYSTEM].[VARIABLES].OurDepart,'mdv');
[TEST_DEP]();
stdio.put_line_pipe('38: '||::[SYSTEM].[VARIABLES].OurDepart,'mdv'); |
Выложи исходники
|
|
 |
wolfio Участник - экстремал
Вступление в Клуб: 22.10.2012
|
Чт Ноя 24, 2016 12:38   |
|
Полезность: Нет оценки
|
Матвеев Евгений пишет: |
Приветствую, судя по логу у тебя всё меняется корректно...
В чем проблема то?
|
Добрый день.
Вопрос в том, почему для в обоих случаев, для каждого филиала значение inner OURDEPART одинаковое?
исходники все выложены.
у операции [TEST_DEP](); такое содержание:
Локальные описания.Код:
OurDepart ref [DEPART] := ::[SYSTEM].[VARIABLES].OurDepart;
Тело.Код:
begin
stdio.put_line_pipe(' inner OURDEPART='||OurDepart,'mdv');
end; |
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
Чт Ноя 24, 2016 12:45   |
|
Полезность: Нет оценки
|
Код: |
begin
stdio.put_line_pipe(' inner OURDEPART='||OurDepart,'mdv');
end;
|
замени на
Код: |
begin
stdio.put_line_pipe(' inner OURDEPART='||::[SYSTEM].[VARIABLES].OurDepart,'mdv');
end;
|
Какой выдается лог? |
|
 |
wolfio Участник - экстремал
Вступление в Клуб: 22.10.2012
|
Чт Ноя 24, 2016 12:56   |
|
Полезность: Нет оценки
|
выдается правильный
12:55:26 ------------------------------------------------001
34: TRC 8935433
inner OURDEPART=8935433
38: TRC 8935433
------------------------------------------------101
34: TRC101 291194961
inner OURDEPART=291194961
38: TRC101 291194961
однако, я не понимаю как перезаполнить переменную локальную в операции. то, что значение глобалки меняется видно даже по обертке |
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
Чт Ноя 24, 2016 12:57   |
|
Полезность: Нет оценки
|
wolfio пишет: | выдается правильный
12:55:26 ------------------------------------------------001
34: TRC 8935433
inner OURDEPART=8935433
38: TRC 8935433
------------------------------------------------101
34: TRC101 291194961
inner OURDEPART=291194961
38: TRC101 291194961
однако, я не понимаю как перезаполнить переменную локальную в операции. то, что значение глобалки меняется видно даже по обертке |
Все логично
Везде ссылки
У тебя в переменной хранится ссылка на старое Подразделение
Так и должно работать
System.ourdepart хранит ссылку на Подразделение
Ты эту ссылку сохранил себе в переменную
Там тоже ссылка и тоже на старое Подразделение |
|
 |
wolfio Участник - экстремал
Вступление в Клуб: 22.10.2012
|
Чт Ноя 24, 2016 13:03   |
|
Полезность: Нет оценки
|
ну как же должно?
переменная должна инициализироваться, когда я вызываю операцию, причем после изменения значения глобалки, а не до того.
кроме того, инициализация делается там безусловно. учитывая, что источник данных верный - как показывает последний лог
в общем, мне так и не понятно как изменить значение локальной переменной ourdepart в вызываемой операции. |
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
Чт Ноя 24, 2016 13:06   |
|
Полезность: Нет оценки
|
wolfio пишет: | ну как же должно?
переменная должна инициализироваться, когда я вызываю операцию, причем после изменения значения глобалки, а не до того.
кроме того, инициализация делается там безусловно. учитывая, что источник данных верный - как показывает последний лог
в общем, мне так и не понятно как изменить значение локальной переменной ourdepart в вызываемой операции. |
У тебя идет вызов только тела операции
В таком случае переменная, которую ты инициализировал в проверке не обновится
Потому что это ссылка на Подразделение, а не на ::[SYSTEM].[VARIABLES].OurDepart
В твоем случае данная инструкция запускает только тело, без запуска проверки, в отличии от ручного запуска test_dep
wolfio пишет: |
однако, я не понимаю как перезаполнить переменную локальную в операции. то, что значение глобалки меняется видно даже по обертке
|
Очень просто
Инициализируй переменную не в проверке, а в теле
Последний раз редактировалось: Матвеев Евгений (Чт Ноя 24, 2016 13:22), всего редактировалось 1 раз |
|
 |
wolfio Участник - экстремал
Вступление в Клуб: 22.10.2012
|
Чт Ноя 24, 2016 13:21   |
|
Полезность: Нет оценки
|
Цитата: | В твоем случае данная инструкция запускает только тело, без запуска проверки, в отличии от ручного запуска test_dep |
што, простите?)
какой проверки? в пакете переменная OURDEPART инициализируется при выполнении ПАКЕТА, еще до валидации, и тела. |
|
 |
Матвеев Евгений Профи
Вступление в Клуб: 31.01.2012
|
Чт Ноя 24, 2016 13:27   |
|
Полезность: Нет оценки
|
wolfio пишет: | Цитата: | В твоем случае данная инструкция запускает только тело, без запуска проверки, в отличии от ручного запуска test_dep |
што, простите?)
какой проверки? в пакете переменная OURDEPART инициализируется при выполнении ПАКЕТА, еще до валидации, и тела. |
Сорри, не проверки, мелко в телефоне. ...Локальное описание
Локальные описания.Код:
OurDepart ref [DEPART] := ::[SYSTEM].[VARIABLES].OurDepart;
Сути дело это не меняет |
|
 |
wolfio Участник - экстремал
Вступление в Клуб: 22.10.2012
|
Чт Ноя 24, 2016 13:33   |
|
Полезность: Нет оценки
|
Цитата: | Сути дело это не меняет |
именно.
перефразирую вопрос - как повторно переинициализировать переменную пакета, при многократном его вызове? |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|