PL/SQL:ORA-00942:表或视图不存在。内部功能

PL/SQL:ORA-00942:表或视图不存在。内部功能,sql,oracle,function,plsql,max,Sql,Oracle,Function,Plsql,Max,当我在块外部写入查询时,我可以查看结果,但在函数内部写入查询会显示错误 SELECT max(logid) FROM hawk.log_patch_execution_result; 输出: 461 Create function, executed in 16 ms PL/SQL: ORA-00942: table or view does not exist PL/SQL: SQL Statement ignored Total execution time 16 ms 功能: CRE

当我在块外部写入查询时,我可以查看结果,但在函数内部写入查询会显示错误

SELECT max(logid) FROM hawk.log_patch_execution_result;
输出:

461
Create function, executed in 16 ms
PL/SQL: ORA-00942: table or view does not exist
PL/SQL: SQL Statement ignored
Total execution time 16 ms
功能:

CREATE OR REPLACE FUNCTION latest_log_id RETURN NUMBER IS
v_log_id NUMBER; 
v_sql VARCHAR2(4000);
BEGIN
  SELECT max(logid) INTO v_log_id FROM hawk.log_patch_execution_result;
  RETURN v_log_id;
END latest_log_id;
/
输出:

461
Create function, executed in 16 ms
PL/SQL: ORA-00942: table or view does not exist
PL/SQL: SQL Statement ignored
Total execution time 16 ms

这似乎是您工作的模式/用户中的一个问题。 尝试通过在函数中添加模式名的方式编译它

CREATE OR REPLACE FUNCTION hawk.latest_log_id RETURN NUMBER IS
v_log_id NUMBER; 
v_sql VARCHAR2(4000);
BEGIN
  SELECT max(logid) INTO v_log_id FROM hawk.log_patch_execution_result;
  RETURN v_log_id;
END latest_log_id;
/

这似乎是您工作的模式/用户中的一个问题。 尝试通过在函数中添加模式名的方式编译它

CREATE OR REPLACE FUNCTION hawk.latest_log_id RETURN NUMBER IS
v_log_id NUMBER; 
v_sql VARCHAR2(4000);
BEGIN
  SELECT max(logid) INTO v_log_id FROM hawk.log_patch_execution_result;
  RETURN v_log_id;
END latest_log_id;
/

您从中选择的表属于用户hawk


应向使用该函数的用户授予该表的SELECT权限。我想您是这样做的,因为SELECT本身工作正常,但不是作为功能的一部分—通过某个角色。但是,这不起作用-您应该直接将权限授予用户,而不是通过角色授予用户。

您正在选择的表属于user hawk


应向使用该函数的用户授予该表的SELECT权限。我想您是这样做的,因为SELECT本身工作正常,但不是作为功能的一部分—通过某个角色。但是,这不起作用-您应该直接将权限授予用户,而不是通过角色。

请从触发器HawkeyMaster5中删除此权限。然后试试看。或者像这样添加它创建或替换函数HawkeyMaster5.latest_log_idHawkeyMaster5。是表log\u patch\u execution\u result的模式。您在哪个模式中创建了函数最新的\u log\u id?`?您在该表上的权限是直接授予您的,还是通过角色授予的?听起来像。请把这个从触发器上取下来。然后试试看。或者像这样添加它创建或替换函数HawkeyMaster5.latest_log_idHawkeyMaster5。是表log\u patch\u execution\u result的模式。您在哪个模式中创建了函数最新的\u log\u id?`?您在该表上的权限是直接授予您的,还是通过角色授予的?听起来像。