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

Передача SET_CONTEXT
На страницу Пред.  1, 2
 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Уроки ЦФТ-Банк для начинающих
Предыдущая тема :: Следующая тема  
Автор Сообщение
Sting
Участник


Вступление в Клуб: 22.05.2017
СообщениеПт Май 26, 2017 11:41    Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:
Sting пишет:

Нет ничего сложного, простой SELECT * FROM IBS.ВЬЮШКА


А зачем вы через вьюшку с сис контекстами? Нарисуйте нормальный селект из таблиц


Я смог только найти код вьюшки, там меня интересует вот что:
Код:
and A1_1.C_AUDIT#OP_DATE >= to_date(SYS_CONTEXT('IBS_USER','RUR_SU_DATEBEG'), 'ddmmyyyy')
and A1_1.C_AUDIT#OP_DATE <= to_date(SYS_CONTEXT('IBS_USER','RUR_SU_DATEEND'), 'ddmmyyyy')


Вот теперь вопрос, как передать эти даты? Very Happy
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеПт Май 26, 2017 12:09    Ответить с цитатой
Полезность: Нет оценки
Читать значения атрибутов контекстов можно системной функцией SYS_CONTEXT,
которой параметрами передаются имя контекста и имя атрибута контекста,
возвращает функция значение заданного атрибута (если атрибут контекста
не задан, то sys_context возвращает null).
Предоставляется возможность заполнения пользовательских контекстов
<IBSO owner>_USER, <IBSO owner>_GLOBAL через процедуру set_context
пакетов EXECUTOR и VALMGR, соответственно (которые доступны в режиме
расширенного синтаксиса):
executor.set_context( p_name varchar2, p_value varchar2);
valmgr.set_context( p_name varchar2, p_value varchar2,
p_username varchar2 default null,
p_client_id varchar2 default null);


Права на пакет executor есть?
Sting
Участник


Вступление в Клуб: 22.05.2017
СообщениеПт Май 26, 2017 12:13    Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:
Читать значения атрибутов контекстов можно системной функцией SYS_CONTEXT,
которой параметрами передаются имя контекста и имя атрибута контекста,
возвращает функция значение заданного атрибута (если атрибут контекста
не задан, то sys_context возвращает null).
Предоставляется возможность заполнения пользовательских контекстов
<IBSO owner>_USER, <IBSO owner>_GLOBAL через процедуру set_context
пакетов EXECUTOR и VALMGR, соответственно (которые доступны в режиме
расширенного синтаксиса):
executor.set_context( p_name varchar2, p_value varchar2);
valmgr.set_context( p_name varchar2, p_value varchar2,
p_username varchar2 default null,
p_client_id varchar2 default null);


Права на пакет executor есть?


По идее да!
yaffil
Профи


Вступление в Клуб: 18.08.2011
СообщениеПт Май 26, 2017 12:19    Ответить с цитатой
Полезность: Нет оценки
Теоритически тогда так:

Код:
and A1_1.C_AUDIT#OP_DATE >= to_date(ibs.SYS_CONTEXT('IBS_USER','RUR_SU_DATEBEG'), 'ddmmyyyy')


но вы должны его еще и инициализировать.
Sting
Участник


Вступление в Клуб: 22.05.2017
СообщениеПт Май 26, 2017 12:57    Ответить с цитатой
Полезность: Нет оценки
yaffil пишет:
Теоритически тогда так:

Код:
and A1_1.C_AUDIT#OP_DATE >= to_date(ibs.SYS_CONTEXT('IBS_USER','RUR_SU_DATEBEG'), 'ddmmyyyy')


но вы должны его еще и инициализировать.


А можно в запросе передать просто даты эти?
У меня нет прав на выполнение таких запросов, я только с вьюшками могу работать..
Sting
Участник


Вступление в Клуб: 22.05.2017
СообщениеПт Май 26, 2017 14:24    Ответить с цитатой
Полезность: Нет оценки
Проблема в том, что code invalid^

executor.set_context('RUR_SU_DATEBEG' '01052017')

Не хочет передавать так...
Guest_SPb
Участник со стажем


Вступление в Клуб: 27.02.2014
СообщениеПт Май 26, 2017 15:16    Ответить с цитатой
Полезность: Нет оценки
Проверьте, вот это у вас отработает:
Код:

declare
  a pls_integer;
begin
  a := ibs.rtl.open();
  ibs.executor.set_context('RUR_SU_DATEBEG', '01052017');
end;

Но у пользователя, под которым это будет выполняться, должны быть права на выполнение пакетов rtl и executor.
Sting
Участник


Вступление в Клуб: 22.05.2017
СообщениеПт Май 26, 2017 15:33    Ответить с цитатой
Полезность: Нет оценки
Guest_SPb пишет:
Проверьте, вот это у вас отработает:
Код:

declare
  a pls_integer;
begin
  a := ibs.rtl.open();
  ibs.executor.set_context('RUR_SU_DATEBEG', '01052017');
end;

Но у пользователя, под которым это будет выполняться, должны быть права на выполнение пакетов rtl и executor.


Teradata SQL Assistant ругается - Query is invalid/
Guest_SPb
Участник со стажем


Вступление в Клуб: 27.02.2014
СообщениеПт Май 26, 2017 15:45    Ответить с цитатой
Полезность: Нет оценки
Цитата:
Teradata SQL Assistant ругается - Query is invalid


Может указать код ошибки ORACLE, который получаете в Teradata SQL Assistant ? И номер строки, на которой возникает ошибка.

В Oracle SQL Developer этот набор команд выполняется без ошибки. Причём сессия была не IBS, а обычного пользователя с минимумом прав.


Последний раз редактировалось: Guest_SPb (Пт Май 26, 2017 16:20), всего редактировалось 1 раз
Sting
Участник


Вступление в Клуб: 22.05.2017
СообщениеПт Май 26, 2017 16:19    Ответить с цитатой
Полезность: Нет оценки
Guest_SPb пишет:
Цитата:
Teradata SQL Assistant ругается - Query is invalid


Может указать код ошибки ORACLE, который получаете в Teradata SQL Assistant. И номер строки, на которой возникает ошибка.

В Oracle SQL Developer этот набор команд выполнился. Причём сессия была не IBS, а обычного пользователя с минимумом прав.


Teradata не сообщает)

В PL\SQL ош:

ORA-06550: Строка 4, столбец 4:
PLS-00201: identifier 'IBS.RTL' must be declared
ORA-06550: Строка 4, столбец 1:
PL/SQL: Statement ignored
Guest_SPb
Участник со стажем


Вступление в Клуб: 27.02.2014
СообщениеПт Май 26, 2017 16:22    Ответить с цитатой
Полезность: Нет оценки
Sting пишет:

В PL\SQL ош:
ORA-06550: Строка 4, столбец 4:
PLS-00201: identifier 'IBS.RTL' must be declared
ORA-06550: Строка 4, столбец 1:
PL/SQL: Statement ignored


Похоже, что на вашей базе у пользователя, под которым запускается этот скрипт, нет прав на выполнение пакета IBS.RTL
Sting
Участник


Вступление в Клуб: 22.05.2017
СообщениеПт Май 26, 2017 16:48    Ответить с цитатой
Полезность: Нет оценки
Guest_SPb пишет:
Sting пишет:

В PL\SQL ош:
ORA-06550: Строка 4, столбец 4:
PLS-00201: identifier 'IBS.RTL' must be declared
ORA-06550: Строка 4, столбец 1:
PL/SQL: Statement ignored


Похоже, что на вашей базе у пользователя, под которым запускается этот скрипт, нет прав на выполнение пакета IBS.RTL


Код:
ibs.executor.set_context('RUR_SU_DATEBEG', '01052017');


Вот так ошибок нет...
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеЧт Июн 08, 2017 14:55    Ответить с цитатой
Полезность: Нет оценки
у меня так получилось - в Developere


Код:

begin
  dbms_output.put_line(rtl.open); 
  ibs.user_context.set_attribute('VW_CRIT_DOG_TO_CLOSE_DATE', '27/04/2018');
end;


после этого
select sys_context('IBS_USER','VW_CRIT_DOG_TO_CLOSE_DATE' ) from dual;

вычитывает значение атрибута, то есть и в вьюхе он должен отработать

select * from ibs.vw_crit_dog_to_close
Эмиралька
Эксперт


Вступление в Клуб: 09.11.2015
СообщениеПт Июн 09, 2017 06:35    Ответить с цитатой
Полезность: Нет оценки
vtar пишет:
у меня так получилось - в Developere...

Если доступа к rtl нет, попробуйте воспользоваться executor. Поправила немножко. Как вариант, должно сработать.

Код:

begin
  dbms_output.put_line('executor.lock_open = {'||executor.lock_open||'}');
  ibs.user_context.set_attribute('VW_CRIT_DOG_TO_CLOSE_DATE', '27/04/2018');
end;
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Уроки ЦФТ-Банк для начинающих Часовой пояс: GMT + 3
На страницу Пред.  1, 2
Страница 2 из 2

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