Передача SET_CONTEXT
На страницу Пред. 1, 2
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
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')
|
Вот теперь вопрос, как передать эти даты?  |
|
 |
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;
|
|
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|