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

时间:2018-10-23 07:29:13

标签: sql oracle function plsql max

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

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

2 个答案:

答案 0 :(得分:3)

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

使用该功能的

用户应被授予SELECT特权(在该表上)。我假设您通过某种角色做到了这一点(因为SELECT本身可以正常工作,但不能作为函数的一部分)。但是,这行不通-您应该直接授予特权给用户,而不是通过角色。

答案 1 :(得分:1)

您正在使用的架构/用户似乎存在问题。 尝试通过在函数中添加架构名称的方式对其进行编译。

@Test
public void testSystemNative() {
    new MockUp<System>(System.class) {
        @Mock
        @SuppressWarnings("unused")
        long currentTimeMillis() {
            return 0L;
        }

    };
    Assert.assertEquals( 0L,System.currentTimeMillis());

}