【发布时间】:2014-08-06 10:08:45
【问题描述】:
注意:请不要将此标记为类似问题的重复。我之所以问这个只是因为其他问题没有解决完全相同的情况,而且他们的答案也没有提供有效的解决方案。
如果我在如下的 select 语句中使用像 INSERTCHILDXML 这样的 XML 相关函数,它完全可以正常工作:
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 函数中成功使用列出的函数?
【问题讨论】: