尽管获得了 GRANT EXECUTE,但我在函数调用中得到“ORA-00904:无效标识符”

Posted

技术标签:

【中文标题】尽管获得了 GRANT EXECUTE,但我在函数调用中得到“ORA-00904:无效标识符”【英文标题】:I get "ORA-00904: invalid identifier" on function call despite being given GRANT EXECUTE 【发布时间】:2019-03-06 16:56:25 【问题描述】:

我正在尝试为 DSCRPT 用户名调用 IS_NUMBER 函数,但我必须在 DSCDBA 登录中创建该函数 我授予 EXECUTE 权限,就像我在其他多个功能上一样,但是这个会引发 INVALID IDENTIFIER 错误

功能:

create or replace 
FUNCTION is_number (p_string IN VARCHAR2)
   RETURN INT
IS
   v_new_num NUMBER;
BEGIN
   v_new_num := TO_NUMBER(p_string);
   RETURN 1;
EXCEPTION
WHEN VALUE_ERROR THEN
   RETURN 0;
END;

授予:

GRANT EXECUTE ON "DCSDBA"."IS_NUMBER" TO "DCSRPT";

以 DSCRPT 身份登录时执行 SQL

SELECT IS_NUMBER('123') FROM DUAL;

错误:

ORA-00904:“IS_NUMBER”:标识符无效 00904. 00000 - “%s:无效标识符” *原因: *操作:行错误:1 列:8

确认登录 DSCRPT 时可以看到该功能

SELECT * FROM ALL_OBJECTS WHERE OBJECT_TYPE IN ('FUNCTION') and owner = 'DCSDBA' order by owner, object_name;

Return of ALL_OBJECTS search

【问题讨论】:

尝试执行函数的全名:SELECT DCSDBA.IS_NUMBER('123') FROM DUAL;您仍然收到错误消息吗? 成功了,你知道为什么这次它没有解决 DCSDBA。部分?我已经调用了我没有全名的其他函数 似乎其他函数存储在 DCSRPT 模式中,因此您可以使用短名称来调用它们。看看这个。 【参考方案1】:

尝试拨打电话

SELECT DCSDBA.IS_NUMBER('123') FROM DUAL;

【讨论】:

多一点解释可能会使这成为一个更好的答案。为什么 OP 的调用不起作用,为什么添加所有者名称可以修复它?另外,也许建议一个同义词。

以上是关于尽管获得了 GRANT EXECUTE,但我在函数调用中得到“ORA-00904:无效标识符”的主要内容,如果未能解决你的问题,请参考以下文章

尽管获得了完全许可,但 aws iam 用户访问被拒绝

我在 Android Q 中获得了 IMEI 空值?

确保我在 laravel 5 中获得了正确的外键语法

nfs挂载上奇怪的系统调用语义

Spotify API 只获得了一些设备,但我的手机获得了所有设备

BigQuery SQL语法错误FOR函数(“语法错误:预期的”)”,但在[7:18]处获得了关键字FOR)