ORA-00995
ORA-00995 表示您在语句中指定的同义词名称无效或未找到,您应确保同义词标识符有效且正确。
让我们看看 ORA-00995 的一些错误模式。
- 创建同义词
- 年龄的代名词
- 改变公共同义词
1.创建同义词
尝试创建私有同义词,但由于 ORA-00995 失败。
SQL> create synonym 2022_countries for hr.countries;
create synonym 2022_countries for hr.countries
*
ERROR at line 1:
ORA-00995: missing or invalid synonym identifierSynonym 是一种模式对象,其命名规则应遵循Oracle 的 Database Object Names and Qualifiers。对于不带引号的标识符,它必须以字母字符开头。此外,将标识符的长度限制为 30 个字节更安全。
解决方案
在这种情况下,我们将数字移动到同义词名称的最后,以符合非引号标识符的命名规则。
SQL> create synonym countries_2022 for hr.countries;
Synonym created.至于引用和非引用命名规则的区别,我们在如何解决 ORA-00904 Invalid Identifier中讲了很多。
总之,无效的列名称会导致 ORA-00904,而无效的同义词名称会导致 ORA-00995。
如果您坚持使用以数字开头或包含特殊字符的标识符,则应使用双引号将名称括起来。
SQL> create synonym "2020_countries" for hr.countries;
Synonym created.由于您需要更多的注意力和精力来仔细操作它们,因此应在特殊情况下创建带引号的标识符,并有足够的理由这样做。
2. 年龄同义词
尝试更改私有同义词,但由于 ORA-00995 失败。
SQL> alter synonym 2020_countries compile;
alter synonym 2020_countries compile
*
ERROR at line 1:
ORA-00995: missing or invalid synonym identifier解决方案
正如我之前所说,引用的标识符应该总是被起诉为引用的。
SQL> alter synonym "2020_countries" compile;
Synonym altered.3. 改变公共同义词
尝试更改公共同义词,但由于 ORA-00995 失败。
SQL> alter synonym public.paybill compile;
alter synonym public.paybill compile
*
ERROR at line 1:
ORA-00995: missing or invalid synonym identifier在 Oracle 中,PUBLIC是一个非常特殊的组,它不是一个有效的模式名称,它只能用于为每个用户创建只能访问的PUBLIC SYSNONYM和PUBLIC DATABASE LINK对象。
换句话说,我们不能把它当作一个普通的模式来编译它,所以像往常一样使用模式名称和标识符的连接来指定一个公共对象在这里是行不通的。
解决方案
为了正确管理公共对象,我们应该通过明确声明来使用正确的特定语法。
SQL> alter public synonym paybill compile;
Synonym altered.编译公共同义词的正确语法是ALTER PUBLIC SYNONYM语句。
原文标题:How to Resolve ORA-00995: missing or invalid synonym identifier
原文作者:Ed Chen
原文链接:https://logic.edchen.org/how-to-resolve-ora-00995-missing-or-invalid-synonym-identifier/




