Передача 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;
 
 | 	 
  | 
			 
		  | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
  | 
   
 
		 |