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

Запуск JOBа от имени другого пользователя
На страницу Пред.  1, 2, 3, 4  След.
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle
Предыдущая тема :: Следующая тема  
Автор Сообщение
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;


не особо помогло... Sad
_________________
Всего должно быть в меру.
2mb
Участник


Вступление в Клуб: 23.04.2008
СообщениеСр Авг 04, 2010 14:18    Ответить с цитатой
Полезность: Нет оценки
zh пишет:
2mb пишет:
::[SYSTEM].[VARIABLES].reinit;


не особо помогло... Sad


Посмотрите операцию ::[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');



Выложи исходники
Код:
[TEST_DEP]();
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]();


В твоем случае данная инструкция запускает только тело, без запуска проверки, в отличии от ручного запуска 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    Ответить с цитатой
Полезность: Нет оценки
Цитата:
Сути дело это не меняет

именно.

перефразирую вопрос - как повторно переинициализировать переменную пакета, при многократном его вызове?
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Разработка в PL/PLUS. Оптимизация запросов Oracle Часовой пояс: GMT + 3
На страницу Пред.  1, 2, 3, 4  След.
Страница 2 из 4

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