Забележка: Моля, не отбелязвайте това като дубликат на подобен въпрос. Питам това само защото другите въпроси не се отнасят до точно същата ситуация и техните отговори не предоставят работещо решение.
Ако използвам свързана с XML функция като INSERTCHILDXML
в израз за избор като следния, тя работи напълно добре:
SELECT INSERTCHILDXML( ... ) FROM DUAL;
Но ако се опитам да използвам това в PL/SQL като следното, дава грешка PLS-00201: identifier 'INSERTCHILDXML' must be declared
.
CREATE FUNCTION ...
RETURN XMLType
AS
BEGIN
RETURN INSERTCHILDXML( ... );
EXCEPTION
...
END;
Функции, които имат този проблем: XMLROOT
, XMLELEMENT
, INSERTCHILDXML
Има десетки резултати при търсене в мрежата за грешката. Много от тях ми казват CREATE PUBLIC SYNONYM
и GRANT EXECUTE
на проблемния идентификатор. Но не работи.
Публичен синоним може да бъде създаден за същото име, но предоставянето на изпълнение (на която и да е схема) е неуспешно с:
ORA-01775: looping chain of synonyms
Ако се опитам да използвам друго синонимно име, при опит за предоставяне на изпълнение, получавам:
ORA-00980: synonym translation is no longer valid
Как мога да разреша проблема и успешно да използвам изброените функции в моята нова PL/SQL функция?