对于Oracle中的函数,我无法使用同义词进行以下查询。我使用以下查询创建了同义词:创建或替换同义词“schema1”。“function1”表示“schema2”。“function2”。
但是当我尝试使用这个同义词时,我得到了下面的错误: ORA-00904:"function1":无效标识符
在为函数创建同义词时,是否也必须传递参数?
发布于 2021-12-15 15:46:30
来自数据库对象名称和限定符文档:
数据库对象命名规则 每个数据库对象都有一个名称。在SQL语句中,使用引用标识符或非引用标识符表示对象的名称。
..。
如果您已经使用以下方法创建了您的函数:
CREATE FUNCTION schema1.function1 /* (...) */ RETURNING NUMBER
IS
BEGIN
RETURN NULL;
END;
/然后,函数使用非引用标识符,其标识符将在数据字典中转换为大写。
然后,您可以使用以下方法引用您的函数:
"SCHEMA1"."FUNCTION1"
SCHEMA1.FUNCTION1
schema1.function1
ScHeMa1."FUNCTION1"
scheMa1.FUNCtion1等。如果引用的标识符是大写的,非引用的标识符可以有任何大小写。
但是,"schema1"."function1"会失败,因为对象称为"SCHEMA1"."FUNCTION1",通过使用引用的标识符,您将强制标识符中的大小写感知(而不是将非引用标识符隐式转换为大写的默认行为,然后大小写敏感性不是问题)。
如果您已经使用小写引用标识符创建了模式和函数(不要这样做,这是不好的做法),那么您将不得不使用完全相同的引用标识符来引用它们。
CREATE FUNCTION "schema1"."function1" /* (...) */ RETURNING NUMBER
IS
BEGIN
RETURN NULL;
END;
/那么您只能使用以下方法来引用它:
"schema1"."function1"并且(假设您有创建同义词的权限),那么您的代码应该可以工作。
https://stackoverflow.com/questions/70365966
复制相似问题