Ошибка компиляции pl/sql кода 
	   
	     | 
   
 
	
		| Предыдущая тема :: Следующая тема   | 
	 
	
	
		| Автор | 
		Сообщение | 
	 
	
		sbk755 Участник
 
  Вступление в Клуб: 27.04.2013
  | 
		
			
				 Пн Янв 27, 2014 17:10   Ошибка компиляции pl/sql кода | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				Уважаемые форумчане, подскажите по следующей ситуации.
 
 
В операции объявлен макрос вида:
 
...
 
pragma macro ('xml','[XML_DB]');
 
...
 
 
В теле операции определен вызов:
 
...
 
&xml.replaceChild(...); 
 
...
 
 
Результат компиляции (успешный) вызова на базе1: 
 
plp$RESULT_1 := Z$RUNTIME_XML_DB.REPLACECHILD(...);
 
 
на базе2 (не успешный):
 
Z$RUNTIME_XML_DB.REPLACECHILD(...);
 
 
Ошибка компиляции на базе2: 
 
PLS-00221: 'replacechild' не является процедурой или не определена.
 
 
Понятно, что при транслировании PL+ кода в PL/SQL в первом  случае вызов "&xml.replaceChild(...);" интерпретируется как вызов функции, в другом случае как процедуры, которой конечно же нет в "Z$RUNTIME_XML_DB", но что на это влияет никак не можем определиться.  Версии ТЯ на базах одинаковые, в чем может быть причина? | 
			 
		  | 
	 
	
		  | 
	 
	
		Random Эксперт
 
  Вступление в Клуб: 27.06.2011
  | 
		
			
				 Вт Янв 28, 2014 05:57   Re: Ошибка компиляции pl/sql кода | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				 	  | sbk755 пишет: | 	 		  Уважаемые форумчане, подскажите по следующей ситуации.
 
...
 
 | 	  
 
 
Насколько принципиально обращаться с функцией именно как с процедурой?
 
Может, если объявить переменную и сделать присваивание, это поможет?   | 
			 
		  | 
	 
	
		  | 
	 
	
		Ezhik Участник со стажем
 
  Вступление в Клуб: 17.04.2009
  | 
		
			
				 Вт Янв 28, 2014 07:16    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				| А если покопать в сторону xml'евских пакетов на Оракле? | 
			 
		  | 
	 
	
		  | 
	 
	
		sbk755 Участник
 
  Вступление в Клуб: 27.04.2013
  | 
		
			
				 Вт Янв 28, 2014 07:44    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				Понимаем, что явное присвоение скорее всего решило бы проблему.
 
Может существует еще какой-либо способповлиять на ситуацию? Не хотелось бы изменять (даже в таких мелочах) уже протестированную операцию. | 
			 
		  | 
	 
	
		  | 
	 
	
		maestro Профи
 
  Вступление в Клуб: 12.10.2010
  | 
		
			
				 Вт Янв 28, 2014 09:35    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				Если я правильно помню, то там нужны синонимы на схеме IBS для dbms_xml<%name%> пакетов. Попробуейте покопать в эту сторону.
 
 
Upd: Заглянул в код XML_DB:
 
 	  | Код: | 	 		  
 
pragma Macro(check_synonym_ex,
 
'declare
 
   z integer;
 
begin
 
   select 1 into z from all_synonyms where owner = ''[1]'' and synonym_name = ''[2]'' and rownum = 1;
 
   [0] := ''pragma Define([3]);'';
 
exception
 
   when NO_DATA_FOUND then
 
      [0] := ''pragma Define([3], false);'';
 
end;'
 
   ,process, substitute);
 
 
--Использование XmlType, если существует синоним DBMS_XMLDOM
 
&check_synonym_ex(PUBLIC, DBMS_XMLDOM, XDB)
 
 
pragma IF_DEF(XDB);
 
...
 
pragma END_IF;
 
 | 	 
  | 
			 
		  | 
	 
	
		  | 
	 
	
		svn Профи
 
  Вступление в Клуб: 04.02.2008
  | 
		
			
				 Вт Янв 28, 2014 09:54    | 
				     | 
			 
			
				Полезность: Нет оценки 
  | 
			 
			
				XML DB нужно устанавливать на схему
 
 
в документации прописано /OTHER/ШЛЮЗЫ/IBSO_ЦФТ-XML_DB | 
			 
		  | 
	 
	
		  | 
	 
	
		 | 
	 
 
  
	 
	    
	   | 
	
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
  | 
   
 
		 |