【发布时间】: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;
【问题讨论】:
-
尝试执行函数的全名:SELECT DCSDBA.IS_NUMBER('123') FROM DUAL;您仍然收到错误消息吗?
-
成功了,你知道为什么这次它没有解决 DCSDBA。部分?我已经调用了我没有全名的其他函数
-
似乎其他函数存储在 DCSRPT 模式中,因此您可以使用短名称来调用它们。看看这个。
标签: sql oracle function ora-00904