【问题标题】:PL/SQL: ORA-00942: table or view does not exist. Inside FunctionPL/SQL: ORA-00942: 表或视图不存在。内部函数
【发布时间】:2019-03-27 08:38:16
【问题描述】:

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

SELECT max(logid) FROM hawk.log_patch_execution_result;

输出:

461

功能:

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;
/

输出:

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

【问题讨论】:

  • 请从触发器中删除它hawkeyemaster5. 然后尝试。或像这样添加它 CREATE OR REPLACE FUNCTION hawkeyemaster5.latest_log_id
  • hawkeyemaster5. 是表log_patch_execution_result 的架构。您在哪个模式中创建了函数latest_log_id? `?
  • 您对该表的权限是直接授予您还是通过角色授予?听起来像that might be the issue

标签: sql oracle function plsql max


【解决方案1】:

您正在使用的架构/用户似乎存在问题。 尝试以在函数中添加模式名称的方式编译它。

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;
/

【讨论】:

    【解决方案2】:

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

    使用该函数的用户应被授予SELECT 权限(在该表上)。我认为您这样做了(因为SELECT 本身可以正常工作,但不是作为函数的一部分)- 通过某些角色。但是,这不起作用 - 您应该直接将权限授予用户,而不是通过角色。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-23
      • 2022-01-23
      • 2015-08-06
      • 2019-01-22
      • 2013-04-14
      • 2015-11-09
      • 2011-12-10
      相关资源
      最近更新 更多